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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tmmon.c

?? PNX系列設(shè)備驅(qū)動(dòng) PNX系列設(shè)備驅(qū)動(dòng)
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/*
COPYRIGHT (c) 1996 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.
*/
/*
	Copyright (c) 1997 Philips Semiconductors - TriMedia. All rights reserved.

FILE	tmmon.c

HISTROY
	970211	Tilakraj Roy	Completely rearchitected to resolve existing problems 
	970812	Tilakraj Roy	Ported to generic TMMan Interface. 
*/
#include "windows.h"
#include "stdio.h"
#include "string.h"
#include "ctype.h"





#include "tmmanapi.h"
#include "tmcrt.h"
#include "verinfo.h"
#include "tmmanlib.h"
#include "iodev.h"

#include "TMObj.h"

///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////

typedef enum  
{
	CMD_STATUS_OK,				// 0	OK
	CMD_STATUS_PARSEERR,		// 1	Parser Error
	CMD_STATUS_QUIT,			// 2	End of Session
	CMD_STATUS_INADEQUATE,		// 3	Inadequate Input
	CMD_STATUS_PARAMERR,		// 4	Parameter Validation Error
	CMD_STATUS_PARAMEXTRA,		// 5	Extra Input
	CMD_STATUS_COMPLETE			// 6	Command Completed Successfully
}	CMD_STATUS_CODE;

typedef struct	_TMMON_OBJECT
{
	// current DSP specific Parameters
	UInt32			DSPCount;
	UInt32			CurrentDSPNumber;
	UInt32			CurrentDSPHandle;
	tmmanDSPInfo	CurrentDSPInfo;

	// flags that can be altered via the set command
	Bool			CRT;
	Bool			WaitForKeyPress;
	Bool			Debug;
	Bool			StdIO; // causes stdin, stdout, stserr to be null in tmcrt


	// global context
	Pointer			pIODev;
	PIODEVICE_VTBL	pIODevVTBL;
	Pointer			StdIn;
	Pointer			StdOut;
	Pointer			StdErr;
	Pointer			pCmdContext;
	Bool			UseCOMPort;
	UInt32			dwPort; 
	UInt32			dwBaud;
	UInt32			dwWindowLines;
	CRunTimeParameterBlock	TMCRTParams;
	UInt32			CRTHandleArray[constTMMANMaximumDeviceCount];
}	TMMON_OBJECT, *PTMMON_OBJECT;

typedef CMD_STATUS_CODE ( *COMMAND_FUNCTION )( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

typedef struct _TMMON_COMMAND
{
	UInt8				szCommand[constTMManStringLength];
	COMMAND_FUNCTION	CommandFunction;
	Pointer				pContext;
	UInt32				dwState;
}	TMMON_COMMAND, *PTMMON_COMMAND;


typedef struct _CMD_READMEMORY
{
	Bool	fSDRAM;		/* is this address in SDRAM range */
	UInt16	wDataSize;	/* word size for current command */
	UInt32	dwAddress;
	UInt32	dwLength;

}	CMD_READMEMORY, *PCMD_READMEMORY;

typedef struct _CMD_WRITEMEMORY
{
	Bool	fSDRAM;		/* is this address in SDRAM range */
	UInt16	wDataSize;	/* word size for current command */
	UInt32	dwAddress;
	UInt32	dwData;
	UInt32	dwLength;
	UInt32	dwStartAddress; /* address where the writing started */	
}	CMD_WRITEMEMORY, *PCMD_WRITEMEMORY;

typedef struct _CMD_LOADRUN
{
	Bool	fSDRAM;		/* is this address in SDRAM range */
	Bool	fDynamicApplicaiton;		/* szApplicaitonFile field is valid */
	UInt8	szExecutableFile[constTMManStringLength];
	UInt8	szApplicationFile[constTMManStringLength];
	UInt32	dwCountArg;
	UInt32	dwIdxArgStr;
	Pointer	ArgumentPtr[constTMManMaximumArgumentCount];
	UInt8	ArgumentBuffer[constTMManMaximumArgumentBuffer];
}	CMD_LOADRUN, *PCMD_LOADRUN;

typedef struct _CMD_DEBUG
{
	Bool	fDebugOn;
	UInt32	DebugOptions;
}	CMD_DEBUG, *PCMD_DEBUG;

typedef struct _CMD_TRACEP
{
	Bool	fTraceIntoFile;
	UInt8	szTraceFileName[constTMManStringLength];
}	CMD_TRACEP, *PCMD_TRACEP;

typedef struct _CMD_DSP
{
	UInt32	DSPNumber;
}	CMD_DSP, *PCMD_DSP;


typedef struct _CMD_SET
{
	UInt32	Type;
	Pointer	Address;
}	CMD_SET, *PCMD_SET;


///////////////////////////////////////////////////////////////////////////////////////////

Bool	IsValidHex ( UInt8* pszString, UInt32 dwSize  );
Bool	GetNextToken( UInt8* pszString, UInt16* pwPosition,
		UInt8* pszToken  );
Bool	ReadInputLine (PTMMON_OBJECT pObject, UInt8* pszInputString);
Bool	ValidateData ( UInt16 wDataSize, UInt32 dwData);
UInt32	GetDebugBit ( UInt8* szToken );
void	DumpMemory ( PTMMON_OBJECT pContext, UInt32 dwAddress, UInt32 dwLength, UInt16 wDataSize, Bool fSDRAM  );
void	PrintProcessorInfo ( PTMMON_OBJECT pObject, tmmanDSPInfo* pDSPCaps );

///////////////////////////////////////////////////////////////////////////////////////////

CMD_STATUS_CODE CmdReadMemory( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdReadUInt32( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdReadUInt16( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdReadUInt8( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdWriteMemory( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdWriteUInt32( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdWriteUInt16( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdWriteUInt8( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdEXELoad( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdEXERun( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdEXEStop( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdEXEReset( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdHelp( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdQuit( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdExit( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdDSP( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdSet( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

CMD_STATUS_CODE CmdDebug( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdTraceP( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );
CMD_STATUS_CODE CmdTraceT( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext );

///////////////////////////////////////////////////////////////////////////////////////////
CMD_READMEMORY	CmdReadMemoryContext;
CMD_WRITEMEMORY	CmdWriteMemoryContext;
CMD_LOADRUN		CmdLoadRunContext;
CMD_DEBUG		CmdDebugContext;
CMD_TRACEP		CmdTracePContext;
CMD_DSP			CmdDSPContext;
CMD_SET			CmdSetContext;

TMMON_COMMAND	CommandTable[] =
{
	{ "RD", CmdReadUInt32, &CmdReadMemoryContext, 0 },
	{ "RW", CmdReadUInt16, &CmdReadMemoryContext, 0 },
	{ "RB", CmdReadUInt8, &CmdReadMemoryContext, 0 },

	{ "WD", CmdWriteUInt32, &CmdWriteMemoryContext, 0 },
	{ "WW", CmdWriteUInt16, &CmdWriteMemoryContext, 0 },
	{ "WB", CmdWriteUInt8, &CmdWriteMemoryContext, 0 },

	{ "LOAD", CmdEXELoad, &CmdLoadRunContext, 0 },
	{ "RUN", CmdEXERun, &CmdLoadRunContext, 0 },
	{ "STOP", CmdEXEStop, Null, 0 },
	{ "RESET", CmdEXEReset, Null, 0 },

	{ "HELP", CmdHelp, Null, 0 },

	{ "QUIT", CmdQuit, Null, 0 },

	{ "EXIT", CmdQuit, Null, 0 },

	{ "DSP", CmdDSP, &CmdDSPContext, 0 },

//	{ "DEBUG", CmdDebug, &CmdDebugContext, 0 },
	{ "DP", CmdTraceP, &CmdTracePContext, 0 },
	{ "DT", CmdTraceT, Null, 0 },

	{ "SET", CmdSet, &CmdSetContext, 0 },
};

UInt32	MaxCommands = sizeof (CommandTable) / sizeof ( TMMON_COMMAND );


///////////////////////////////////////////////////////////////////////////////////////////
CMD_STATUS_CODE CmdQuit( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	CMD_STATUS_CODE	Status = CMD_STATUS_OK;
	enum { QU_CMD, QU_PROCESS };

	switch ( *pdwState )
	{
		case QU_CMD :
		*pdwState = QU_PROCESS;
		break;

		case QU_PROCESS :
		*pdwState = QU_CMD;
		Status = CMD_STATUS_QUIT;
		break;
	}
	return Status;
}

CMD_STATUS_CODE CmdReadMemory( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	
	CMD_STATUS_CODE	Status = CMD_STATUS_OK;
	PCMD_READMEMORY	pObject = 	pContext->pCmdContext;
	enum { RX_CMD, RX_ADDRESS, RX_LENGTH, RX_PROCESS };

	if ( ( szToken == Null )  && ( *pdwState != RX_PROCESS ) )
	{
		Status = CMD_STATUS_INADEQUATE;
		goto CmdReadMemoryERROR;
	}

	switch ( *pdwState )
	{
		case RX_CMD :
		*pdwState = RX_ADDRESS;
		// syntax error
		break;

		case RX_ADDRESS :
		// default incase of error
		*pdwState = RX_CMD;
		if ( IsValidHex ( szToken, 8 ) == False )
		{
			Status = CMD_STATUS_PARSEERR;
			goto CmdReadMemoryERROR;
		}
		if ( sscanf( szToken,"%x", &pObject->dwAddress ) != 1)
		{
			Status = CMD_STATUS_PARSEERR;
			goto CmdReadMemoryERROR;
		}
		// no need to validate the address, the address and
		// length will be validated together one both are available

		*pdwState = RX_LENGTH;
		break;

		case RX_LENGTH :
		*pdwState = RX_CMD;
		if ( sscanf( szToken,"%x", &pObject->dwLength ) != 1)
		{
			Status = CMD_STATUS_PARSEERR;
			goto CmdReadMemoryERROR;
		}

		if ( tmmanValidateAddressAndLength (
			&pContext->CurrentDSPInfo.MMIO,
			pObject->dwAddress,
			pObject->dwLength ) == True )
		
		{
			pObject->fSDRAM = False;
			pObject->wDataSize = 4;				
			*pdwState = RX_PROCESS;
			break;
		}

		if ( tmmanValidateAddressAndLength (
			&pContext->CurrentDSPInfo.SDRAM,
			pObject->dwAddress,
			pObject->dwLength ) == True )
		
		{
			pObject->fSDRAM = True;
			//pObject->wDataSize = 4;				
			*pdwState = RX_PROCESS;
			break;
		}

		Status = CMD_STATUS_PARAMERR;
		goto CmdReadMemoryERROR;
		break;

		case	RX_PROCESS:
		DumpMemory ( pContext, pObject->dwAddress, pObject->dwLength, pObject->wDataSize, pObject->fSDRAM );
		*pdwState = RX_CMD;
		Status = CMD_STATUS_COMPLETE;
		break;

	}	// switch ( *pdwState )
	return Status;

CmdReadMemoryERROR :
	*pdwState = RX_CMD;
	return Status;
}

CMD_STATUS_CODE CmdReadUInt32( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_READMEMORY	pCmdState =  pContext->pCmdContext;	
	pCmdState->wDataSize = 4;
	return CmdReadMemory ( szToken, pdwState, pContext );
}


CMD_STATUS_CODE CmdReadUInt16( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_READMEMORY	pCmdState =  pContext->pCmdContext;	
	pCmdState->wDataSize = 2;
	return CmdReadMemory ( szToken, pdwState, pContext );
}

CMD_STATUS_CODE CmdReadUInt8( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_READMEMORY	pCmdState =  pContext->pCmdContext;	
	pCmdState->wDataSize = 1;
	return CmdReadMemory ( szToken, pdwState, pContext );
}


CMD_STATUS_CODE CmdWriteMemory( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	
	CMD_STATUS_CODE	Status = CMD_STATUS_OK;
	PCMD_WRITEMEMORY	pObject = 	pContext->pCmdContext;
	UInt32			dwLinAddr, dwData;

	enum { WX_CMD, WX_ADDRESS, WX_DATA };	

	if ( ( szToken == Null )  && ( *pdwState != WX_DATA ) )
	{
		Status = CMD_STATUS_INADEQUATE;
		goto CmdWriteMemoryERROR;
	}

	switch ( *pdwState )
	{
		case WX_CMD :
		pObject->dwLength= 0;
		*pdwState = WX_ADDRESS;
		// syntax error
		break;

		case WX_ADDRESS :
		// default incase of error
		*pdwState = WX_CMD;
		if ( IsValidHex ( szToken, 8 ) == False )
		{
			Status = CMD_STATUS_PARSEERR;
			goto CmdWriteMemoryERROR;
		}
		if ( sscanf( szToken,"%x", &pObject->dwAddress ) != 1)
		{
			Status = CMD_STATUS_PARSEERR;
			goto CmdWriteMemoryERROR;
		}
		*pdwState = WX_DATA;
		break;

		case WX_DATA :
		if ( ! szToken )
		{
			DumpMemory ( pContext, pObject->dwAddress, pObject->dwLength, pObject->wDataSize, pObject->fSDRAM );
			*pdwState = WX_CMD;
			Status = CMD_STATUS_COMPLETE;
			break;
		}

		if ( IsValidHex ( szToken, pObject->wDataSize * 2 ) == False )
		{
			Status = CMD_STATUS_PARAMERR;
			goto CmdWriteMemoryERROR;
		}
		if ( sscanf( szToken,"%x", &dwData ) != 1)
		{
			Status = CMD_STATUS_PARAMERR;
			goto CmdWriteMemoryERROR;
		}		
		if ( ! ValidateData (  pObject->wDataSize, dwData) )
		{
			Status = CMD_STATUS_PARAMERR;
			goto CmdWriteMemoryERROR;
		}

		if ( tmmanValidateAddressAndLength (
			&pContext->CurrentDSPInfo.SDRAM,
			pObject->dwAddress,
			pObject->dwLength + pObject->wDataSize ) == True )
		{
			pObject->fSDRAM = True;
			dwLinAddr =  tmmanPhysicalToMapped ( 
				&pContext->CurrentDSPInfo.SDRAM,
				pObject->dwAddress);
			goto	CmdWriteMemoryWRITE;
		}

		// mmio accesses have to be of DWORD length
		if ( tmmanValidateAddressAndLength (
			&pContext->CurrentDSPInfo.MMIO,
			pObject->dwAddress,
			pObject->dwLength + 4) == True )
		{
			pObject->fSDRAM = False;
			dwLinAddr =  tmmanPhysicalToMapped ( 
				&pContext->CurrentDSPInfo.MMIO,
				pObject->dwAddress);
			pObject->wDataSize = 4;
			goto	CmdWriteMemoryWRITE;	
		}

		Status = CMD_STATUS_PARAMERR;
		goto CmdWriteMemoryERROR;
		

CmdWriteMemoryWRITE:

		// increment the number of locations items we are writing
		pObject->dwLength += pObject->wDataSize;

		switch ( pObject->wDataSize )
		{
			case 1 :
			*((UInt8*)dwLinAddr) = (UInt8)dwData;
			break;

			case 2 :
			*((UInt16*)dwLinAddr) = (UInt16)dwData;
			break;

			case 4 :
			*((UInt32*)dwLinAddr) = (UInt32)dwData;
			break;
		}
		break;

	} // switch

CmdWriteMemoryERROR :
	return Status;
}

CMD_STATUS_CODE CmdWriteUInt32( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_WRITEMEMORY	pObject =  pContext->pCmdContext;	
	pObject->wDataSize = 4;
	return CmdWriteMemory ( szToken, pdwState, pContext );
}

CMD_STATUS_CODE CmdWriteUInt16( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_WRITEMEMORY	pObject =  pContext->pCmdContext;	
	pObject->wDataSize = 2;
	return CmdWriteMemory ( szToken, pdwState, pContext );

}

CMD_STATUS_CODE CmdWriteUInt8( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_WRITEMEMORY	pObject =  pContext->pCmdContext;	
	pObject->wDataSize = 1;
	return CmdWriteMemory ( szToken, pdwState, pContext );
}

CMD_STATUS_CODE CmdEXELoad( UInt8* szToken, UInt32* pdwState, PTMMON_OBJECT pContext )
{
	PCMD_LOADRUN	pObject		=  pContext->pCmdContext;	
	CMD_STATUS_CODE	Status	= CMD_STATUS_OK;

	UInt32				ImageType,ImageEndian;

	enum { LD_CMD, LD_FILENAME, LD_PROCESS };

	if ( ( szToken == Null )  && ( *pdwState != LD_PROCESS ) )
	{
		Status = CMD_STATUS_INADEQUATE;
		goto CmdEXELoadERROR;
	}

	switch ( *pdwState )
	{
		case LD_CMD :
		*pdwState = LD_FILENAME;
		break;

		case LD_FILENAME :
		*pdwState = LD_PROCESS;
		strcpy ( pObject->szExecutableFile, szToken );
		break;


		case LD_PROCESS :
		{

			UInt32	DSPStatus;
			TMStatus TMMANStatus;
			UInt8	szErrorString[constTMManStringLength];

			tmmanDSPGetStatus ( pContext->CurrentDSPHandle, &DSPStatus );

			switch ( DSPStatus )
			{
				case constTMManDSPStatusRunning :
				tmmanDSPStop( pContext->CurrentDSPHandle );
				if ( pContext->CRT )
				{
					if ( pContext->CRTHandleArray[pContext->CurrentDSPNumber] )
					{
						UInt32 ExitCode;

						cruntimeDestroy ( 
							pContext->CRTHandleArray[pContext->CurrentDSPNumber], &ExitCode );
						pContext->CRTHandleArray[pContext->CurrentDSPNumber] = 0;
					}
				}
				else
				{
					// signal the event that whacks tmrun
					HANDLE	hServerEvent;
					CHAR	szEventName[80];
					wsprintf( szEventName, "TMRunExitEvent%x", pContext->CurrentDSPNumber );

					if ( ( hServerEvent = OpenEvent ( EVENT_MODIFY_STATE, TRUE,
						szEventName ) ) != NULL )
					{
						SetEvent ( hServerEvent );
						CloseHandle (  hServerEvent );
					}
				}
				break;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品高清在线| 99视频精品在线| 国产免费久久精品| 精品福利一二区| aaa欧美日韩| 成人黄色在线网站| 国产91丝袜在线播放九色| 国产精品亚洲视频| 亚洲mv在线观看| 欧美激情一区在线观看| 欧美国产97人人爽人人喊| 国产人成一区二区三区影院| 欧美激情艳妇裸体舞| 国产精品对白交换视频| 亚洲天堂2016| 亚洲国产cao| 日本伊人午夜精品| 国产一区二区三区视频在线播放| 亚洲精品国产无天堂网2021| 一区二区三区四区不卡视频| 一区二区在线观看不卡| 午夜精品aaa| 久久精品国产99国产精品| 亚洲一区二区三区四区的| 亚洲成人激情社区| 久久99久久99| 国产98色在线|日韩| 97久久精品人人爽人人爽蜜臀 | 久久狠狠亚洲综合| 亚洲一区在线免费观看| 日韩电影一区二区三区四区| 精品亚洲成av人在线观看| 成人综合婷婷国产精品久久| 色综合欧美在线| 欧美精品自拍偷拍| 久久人人爽人人爽| 亚洲欧美经典视频| 毛片av中文字幕一区二区| 成人理论电影网| 欧美日韩国产综合一区二区三区| 色噜噜夜夜夜综合网| 欧美一区日本一区韩国一区| 久久久久国产精品厨房| 亚洲精品视频在线| 免费一级片91| 精品无人区卡一卡二卡三乱码免费卡| 日韩成人av影视| 日韩精品欧美精品| 从欧美一区二区三区| 精品婷婷伊人一区三区三| xfplay精品久久| 亚洲最大的成人av| 国产一区二区网址| 欧美伊人久久久久久久久影院| 欧美三区免费完整视频在线观看| 欧美色老头old∨ideo| 久久精子c满五个校花| 亚洲va韩国va欧美va精品| 国产成人精品亚洲日本在线桃色 | 欧美视频一区在线| 久久精品水蜜桃av综合天堂| 亚洲福利国产精品| 成人一区二区在线观看| 欧美不卡一区二区三区| 久久先锋影音av| 亚洲国产乱码最新视频| 午夜电影久久久| 成人一级黄色片| 91视频免费观看| 久久久精品综合| 视频一区视频二区中文字幕| 成人av资源下载| 亚洲精品一区二区三区在线观看| 国产视频视频一区| 日本欧美一区二区三区乱码| 精品一区二区三区在线观看| 国产福利精品导航| 一本大道久久a久久精品综合| 欧美色爱综合网| 日韩欧美aaaaaa| 午夜精品国产更新| 色婷婷av一区二区三区软件 | 91国产福利在线| 国产精品视频麻豆| 狠狠狠色丁香婷婷综合激情| 欧美日韩国产高清一区二区| 精品国产一二三区| 日产国产高清一区二区三区| 在线免费视频一区二区| ㊣最新国产の精品bt伙计久久| 亚洲成av人片一区二区三区| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩国产一区| 一区二区三区四区在线| 91亚洲精品一区二区乱码| 日本一区二区免费在线| 国产精品中文字幕日韩精品| 久久综合九色综合欧美亚洲| 六月丁香婷婷色狠狠久久| 日韩精品专区在线影院观看| 日本aⅴ精品一区二区三区 | 日本欧美一区二区三区| 欧美日韩一区高清| 性感美女极品91精品| 6080国产精品一区二区| 国产精品免费人成网站| 成人福利电影精品一区二区在线观看| 欧美另类videos死尸| 亚洲国产成人精品视频| 欧美日韩精品久久久| 亚洲一区二区三区四区不卡| 欧美美女一区二区三区| 日韩经典一区二区| 日韩欧美精品在线| 精品亚洲aⅴ乱码一区二区三区| 欧美视频在线一区| 日产精品久久久久久久性色| 欧美大片在线观看一区二区| 日本欧美一区二区在线观看| 欧美videofree性高清杂交| 国产馆精品极品| 伊人婷婷欧美激情| 91精品中文字幕一区二区三区| 日韩美女视频一区二区| 91精品办公室少妇高潮对白| 国产女主播在线一区二区| 成人av网在线| 亚洲一区二区黄色| 91麻豆.com| 午夜精品久久久| 久久精品欧美一区二区三区麻豆| 日韩av在线发布| 欧美日本在线视频| 蜜桃视频免费观看一区| 欧美日韩国产精品成人| 激情图片小说一区| 国产精品国产三级国产有无不卡| 国产一区二区三区在线看麻豆| 91精品国产色综合久久不卡电影| 一区二区久久久久| 精品三级av在线| 日本久久一区二区三区| 久久99国产精品成人| 成人免费一区二区三区视频| 欧美日韩国产首页在线观看| 亚洲成av人片一区二区| 久久久久久久久久久黄色| 久久99日本精品| 亚洲欧美国产高清| 亚洲精品在线观看网站| 欧美在线播放高清精品| 国产不卡视频一区二区三区| 亚洲国产一区二区a毛片| 久久精品亚洲国产奇米99| 国产成人精品免费网站| 亚洲成人www| 国产女同互慰高潮91漫画| 91精品免费观看| 99久久婷婷国产综合精品电影| 亚洲人吸女人奶水| 精品剧情v国产在线观看在线| 奇米影视一区二区三区| 中文字幕一区二区三区色视频| www.爱久久.com| 麻豆精品在线看| 亚洲一区在线观看视频| 欧美极品另类videosde| 日韩一级二级三级| 一本大道综合伊人精品热热| 亚洲va韩国va欧美va精品| 国产精品人妖ts系列视频| 日韩欧美中文字幕一区| 欧美在线你懂得| 91在线观看美女| 国产91精品一区二区麻豆网站| 亚洲国产精品成人久久综合一区| 成人国产亚洲欧美成人综合网| 国产精品国产三级国产有无不卡 | 久久久综合视频| 欧美日韩1区2区| 91电影在线观看| 99热精品国产| 国产高清精品在线| 亚洲男女一区二区三区| 欧美高清在线视频| 久久久精品国产免费观看同学| 91蜜桃婷婷狠狠久久综合9色| 亚洲成人免费电影| 日韩毛片在线免费观看| 国产精品欧美极品| 欧美色图片你懂的| 色av一区二区| 91网站在线观看视频| 成人一区在线看| 国产.欧美.日韩| 粉嫩av一区二区三区在线播放| 一区二区三区在线观看视频| 中文字幕在线不卡国产视频| 欧美激情在线一区二区三区| 国产亚洲成aⅴ人片在线观看 |