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

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

?? hdlc100init.c

?? 三星4510開發板Sdns100上代的演示程序
?? C
字號:
/****************************************************************/
/* 																*/ 
/*   MODULE:  BDTest/hdlc100init.c								*/
/*   DATE:    98/12/01       									*/
/*   PURPOSE: hdlc(high level data link control) header			*/
/*                                                    			*/
/*--------------------------------------------------------------*/
/*      Copyright (C) 1998 Samsung Electronics.     			*/
/*                                                 				*/
/****************************************************************/

#include "snds.h"
#include "hdlc100.h"
#include "sysconf.h"
#include "uart.h"
#include "pollio.h"
#include "timer.h"
#include "isr.h"
#include "dma.h"
#include "memory.h"
#include "kslib.h"

/*
 * Function 	: HdlcInitialize
 * Description 	: This function initiailze the HDLC Block 
 */
void HdlcInitialize (void)
{

	U8 	channel;
	U32	UserArea;

	for(channel=HDLCA;channel<=HDLCB;channel++)
	{
		//Reset All HDLC block
		HdlcReset(channel) ;

		// Internal Register Setting for Tx/Rx operation
		HMODE(channel) 	= gMode ;
#if MODE == DMA
		HCON(channel) 	= gControl ;
		HINTEN(channel) = gHIntENA ;
#else
		HCONA  			= Tx1WD|Rx1WD|TxFlag|TxDTR | BRGEN ;
		HINTENA 		= TxFCIE|TxFAIE|TxUIE|RxFAIE|RxFVIE| \
			 			  RxABTIE|RxCRCEIE|RxNOIE|RxOVIE ;
#endif
		HBRGTC(channel) = GetBaudRate(10000000) ;	
		AddressSet(channel) ;

#if MODE == DMA
		MaxFrameLengthSet(channel,MaxFrameLength);
		HRBSR(channel) 	= RxBufLength ;

		// Initialize Buffer Descriptor
		TxBD_init(channel,NORMAL,NORMAL) ;
		RxBD_init(channel) ;
		TxDataWrite(channel,CPU) ;

		// Ready to receive Data
		HDMARxEN(channel) ;	
#endif
		HDLCRxEN(channel) ;	
	
	}

	// Interrupt Vector Setup
	SysSetInterrupt(nHDLCTxA_INT, HDLCTxA_isr );
	SysSetInterrupt(nHDLCRxA_INT, HDLCRxA_isr );
	SysSetInterrupt(nHDLCTxB_INT, HDLCTxB_isr );
	SysSetInterrupt(nHDLCRxB_INT, HDLCRxB_isr );

	Enable_Int(nHDLCTxA_INT);
	Enable_Int(nHDLCRxA_INT);
	Enable_Int(nHDLCTxB_INT);
	Enable_Int(nHDLCRxB_INT);
	Enable_Int(nGLOBAL_INT); 


	// Initialize Global Variables
	gCPUmode = gHdlcRxDone = 0 ;
	for(channel=HDLCA;channel<=HDLCB;channel++)
	{
		gFrameCount[channel]= 0 ;
		//initialize User Area
		UserArea 			= (U32) RxUserArea[channel] | NonCache ;
		gUserArea[channel] 	= (U32 *)UserArea ;
	}
	ClrErrReport() ;
}


/* 
 * Tx Buffer Descriptor generation &  
*/

void TxBD_init(U8 channel,int mode, int arg)
{
	sBufferDescriptor	*psTxBD ;
	sBufferDescriptor	*psStartBD ;
	sBufferDescriptor	*psPrevBD ;
	U32					TxBDataStartAddr ;	
	U32					TxBufLength ;	
	U32					i ;
	U32					MisAlignBytes ;
	U32					NullPoint ;

	// Mode Set
	if(mode == BUFFERLEN) 		TxBufLength = arg ;
	else if(mode == NULLLIST) 	NullPoint   = arg ;

	gCTxBDStart[channel] = (U32)sTxBDStart[channel] | NonCache ;
	HDMATXPTR(channel)   =  gCTxBDStart[channel] ;

	psTxBD 				 = (sBufferDescriptor *)gCTxBDStart[channel] ;
	psStartBD 			 = psTxBD ;
	psTxBD->PrevBD 		 = (sBufferDescriptor *)NULL ;
	
	TxBDataStartAddr 	 = (U32)TxBBaseAddr ;
	TxBDataStartAddr    |= NonCache ; 
	
	for(i=1; i<=MaxTxBDCount; i++){
		if(mode!=1) 		TxBufLength = 0x120; //PatternGen(i) & 0x7ff; //debug
		if(TxBufLength<6) 	TxBufLength = 6 ;
		
		MisAlignBytes 			= (WORD-TxBufLength%WORD)%WORD ;
		psTxBD->BufferDataPtr 	= (U32)TxBDataStartAddr & BOwnerShip_CPU;
		psTxBD->Reserved 		= 0x0; 
		psTxBD->StatusLength 	= TxBufLength  ;   

		//Next Buffer Descriptor Allocation
		if(psTxBD->PrevBD != (sBufferDescriptor *) NULL){
			if(mode==2 && i==NullPoint) {
				psPrevBD->NextBD = 0x0 ;
				break;
		 	}
			else psPrevBD->NextBD = psTxBD ;		
		}

		psPrevBD = psTxBD ; // = psTxBD++
		psTxBD++ ;
		
		if(i!=MaxTxBDCount) psTxBD->PrevBD = psPrevBD ;

		TxBDataStartAddr += TxBufLength + MisAlignBytes ; 
	}
	
	psTxBD-- ;
	//Assign last buffer descriptor
	psTxBD->NextBD = psStartBD ;
	//Assign first buffer descriptor
	psStartBD->PrevBD = psTxBD ; 
}

void TxBufferInitialize(U8 channel)
{	
	sBufferDescriptor	*psTxBD ;
	U32					*BufPtr ;
	U32					*pBDPtr ;
	U32					j, LOOP, TxLength, MisAlignBytes;
	U32					u32TxBD ;

	// check last flag bit of current Buffer Descriptor
	while(1)
	{
		u32TxBD = (!channel) ? HDMATXPTRA : HDMATXPTRB ;
		psTxBD = (sBufferDescriptor *) u32TxBD ;
		pBDPtr = (U32 *)&psTxBD->Reserved ;
		if(*pBDPtr & LastBF) {
			pBDPtr = (U32 *)&psTxBD->BufferDataPtr ;
			while (*pBDPtr & BOwnerShip_DMA) ;
			break;
		} 
	}
	
	// Write Frame Start Address & change Owner for DMA
	BufPtr = (U32 *) ( (U32) TxBBaseAddr + NonCache ) ;
	pBDPtr = (U32 *)gCTxBDStart[channel] ;
	psTxBD = (sBufferDescriptor *) pBDPtr ;
	*pBDPtr |= BOwnerShip_DMA ;	

	TxLength = (U32)psTxBD->StatusLength & 0xFFFFFF ;  
	MisAlignBytes = TxLength & 0x3 ;
	*BufPtr++ = 0xaaaaaaaa ;
	LOOP = (TxLength<4) ? 0 : TxLength/4-1 ;
	for(j=0; j<LOOP; j++) *BufPtr++ = j ; 
  	switch(MisAlignBytes) {
		case 1 : *BufPtr++ = 
					(TxLength<<8) & 0xffffff00 | 0x000000cc ; break; 
		case 2 : *BufPtr++ = 
					(TxLength<<16) & 0xffff0000 | 0x0000cccc ; break;
		case 3 : *BufPtr++ =  
					(TxLength<<24) & 0xff000000 | 0x00cccccc ; break;
		default : break;
	}
}

void TxDataWrite(U8 channel,int Owner)
{
	sBufferDescriptor	*psTxBD ;
	U32					*BufPtr ;
	U32					*pBDPtr ;
	U32					i, j, LOOP, TxLength, MisAlignBytes;

	BufPtr = (U32 *) ( (U32) TxBBaseAddr | NonCache ) ;

	psTxBD = sTxBDStart[channel] ;
	psTxBD = (sBufferDescriptor *) ( (U32) psTxBD | NonCache ) ; 

	for(i=0; i<MaxTxBDCount; i++){
		pBDPtr = (U32 *)&psTxBD->BufferDataPtr ;
		if(Owner==DMA) *pBDPtr |= BOwnerShip_DMA ;	

		psTxBD->Reserved = LastBF; 
		TxLength = (U32)psTxBD->StatusLength & 0xFFFFFF ;  
		MisAlignBytes = (WORD-TxLength%WORD)%WORD ;
		*BufPtr++ = 0xaaaaaaaa ;
		LOOP = (TxLength<4) ? 0 : TxLength/4-1 ;
		for(j=0; j<LOOP; j++) *BufPtr++ = 0xffffff00|(j+i) ; 
		switch(MisAlignBytes) {
			case 1 : *BufPtr++ = 
						(TxLength<<8) & 0xffffff00 | 0x000000cc ; break; 
			case 2 : *BufPtr++ = 
						(TxLength<<16) & 0xffff0000 | 0x0000cccc ; break;
			case 3 : *BufPtr++ =  
						(TxLength<<24) & 0xff000000 | 0x00cccccc ; break;
			default : break;
		}
		psTxBD = psTxBD->NextBD ;
	} 
}

void RxBD_init(U8 channel) 
{
	sBufferDescriptor	*psRxBD ;
	sBufferDescriptor	*psPrevBD, *psStartBD ;
	U32					RxBDataStartAddr ;	
	U32					i ;

	//RxBBaseAddrA = (U32 *)0x200000 ;

	gCRxBDStart[channel] 	= (U32)sRxBDStart[channel] | NonCache ;
	HDMARXPTR(channel)   	= gCRxBDStart[channel] ; 
	psRxBD 					= (sBufferDescriptor *)gCRxBDStart[channel] ;
	psStartBD 				= psRxBD ;
	psRxBD->PrevBD 			= (sBufferDescriptor *)NULL ;
	RxBDataStartAddr 		= (U32)RxBBaseAddr[channel] | NonCache ;
 
	for(i=1; i<=MaxRxBDCount; i++){
		psRxBD->BufferDataPtr 	=(U32)RxBDataStartAddr | BOwnerShip_DMA;
		psRxBD->Reserved 		= 0x0 ;   
		psRxBD->StatusLength 	= 0x0 ;   
		//Next Buffer Descriptor Allocation
		if(psRxBD->PrevBD != (sBufferDescriptor *) NULL)
			psPrevBD->NextBD = psRxBD ;		

		psPrevBD = psRxBD ; // = psRxBD++
		psRxBD++ ;
		
		if(i!=MaxRxBDCount) psRxBD->PrevBD = psPrevBD ;

		RxBDataStartAddr += RxBufLength ;
	}
	//
	psRxBD-- ;
	//Assign last buffer descriptor
	psPrevBD->NextBD 	= psStartBD ;
	//Assign first buffer descriptor
	psStartBD->PrevBD 	= psRxBD ; 
} 
		


void HDLCTxA_isr(void)
{
	U32 i , j ;
	U32 IntHDLCStatus ;
	U32 CheckStatus, TxFail ;
	U32	PacketSize;

	IntHDLCStatus = HSTATA ;
	//HSTATA = IntHDLCStatus ;
	Clear_PendingBit(nHDLCTxA_INT) ;

	TxFail = 0 ;
	
#if MODE == DMA
	if(IntHDLCStatus & DTxFD)
	{
		gHTxStatus[HDLCA].DMATxFD++ ;
		HSTATA = IntHDLCStatus & DTxFD ; 
	}

	CheckStatus = TxSCTS|TxU|DTxABT|DTxNL|DTxNO ;
	if(IntHDLCStatus & CheckStatus){
		if(IntHDLCStatus & (DTxNO|DTxABT|DTxNL)){
			if(IntHDLCStatus & DTxABT){
				gHTxStatus[HDLCA].DMATxABT++ ;
				HSTATA = IntHDLCStatus & DTxABT ; 
			}
			if(IntHDLCStatus & DTxNO){
				gHTxStatus[HDLCA].DMATxNO++ ;
				HSTATA = IntHDLCStatus & DTxNO ; 
			}
			
			if(IntHDLCStatus & DTxNL){
				gHTxStatus[HDLCA].DMATxNL++ ;
				HSTATA = IntHDLCStatus & DTxNL ; 
				put_byte('N') ;
			}
			//TxFail = 1 ;
		}
	}
	if(!CheckTxStatus(HDLCA)|TxFail) 
		Print("\r HDLCA Tx Fail for Null List") ;
#else 
	 if(IntHDLCStatus & TxFA){
		for(i=0; i<gMaxPacketCnt; i++){
		    PacketSize = PatternGen(i)&0xFFFF;	
			if(PacketSize < 2) PacketSize = 2 ;
	
			HTXFIFOCA = 0xFFFF0000 | (i+1) ;
			
			for(j=0; j<PacketSize; j++){
				if(j==(PacketSize-1)){
					HTXFIFOTA = 0xEEEE0000|PacketSize ; 
				} else HTXFIFOCA = PatternGen(j) | i ; 
			}

			if(i==(gMaxPacketCnt-1))
				HINTENA &= ~ TxFAIE ;      
		}
	}

	if(IntHDLCStatus & TxFC){
		gHTxStatus[HDLCA].TxFrameComp++ ;
	}	
	if(IntHDLCStatus & TxU){
		gHTxStatus[HDLCA].TxUnderrun++ ;
	}
#endif
}

void HDLCTxB_isr(void)
{
	U32 i , j ;
	U32 IntHDLCStatus ;
	U32 CheckStatus, TxFail ;
	U32	PacketSize;

	IntHDLCStatus = HSTATB ;
	//HSTATB = IntHDLCStatus ;
	Clear_PendingBit(nHDLCTxB_INT) ;

	TxFail = 0 ;
	
#if MODE == DMA
	if(IntHDLCStatus & DTxFD)
	{
		gHTxStatus[HDLCB].DMATxFD++ ;
		HSTATB = IntHDLCStatus & DTxFD ;
	}

	CheckStatus = TxSCTS|TxU|DTxABT|DTxNL|DTxNO ;
	if(IntHDLCStatus & CheckStatus){
		if(IntHDLCStatus & (DTxNO|DTxABT|DTxNL)){
			
			if(IntHDLCStatus & DTxABT){
				gHTxStatus[HDLCB].DMATxABT++ ;
				HSTATB = IntHDLCStatus & DTxABT ;
			}
			if(IntHDLCStatus & DTxNO){
				gHTxStatus[HDLCB].DMATxNO++ ;
				HSTATB = IntHDLCStatus & DTxNO ;
			}
			if(IntHDLCStatus & DTxNL){
				gHTxStatus[HDLCB].DMATxNL++ ;
				HSTATB = IntHDLCStatus & DTxNL ;
			}
			//TxFail = 1 ;
		}
	}
	if(!CheckTxStatus(HDLCB)|TxFail) Print("\r HDLCB Tx Fail") ;
#else
	 if(IntHDLCStatus & TxFA){
		for(i=0; i<gMaxPacketCnt; i++){
		    PacketSize = PatternGen(i)&0xFFFF;	
			if(PacketSize < 2) PacketSize = 2 ;
	
			HTXFIFOCB = 0xFFFF0000 | (i+1) ;
			
			for(j=0; j<PacketSize; j++){
				if(j==(PacketSize-1)){
					HTXFIFOTB = 0xEEEE0000|PacketSize ; 
				} else HTXFIFOCB = PatternGen(j) | i ; 
			}

			if(i==(gMaxPacketCnt-1))
				HINTENB &= ~ TxFAIE ;      
		}
	}

	if(IntHDLCStatus & TxFC){
		gHTxStatus[HDLCB].TxFrameComp++ ;
	}	
	if(IntHDLCStatus & TxU){
		gHTxStatus[HDLCB].TxUnderrun++ ;
	}
#endif
}


void HDLCRxA_isr(void)
{
	U32 IntHDLCStatus, pRxBDPtr ;
	U32 RxFail ;
	//U32 CheckStatus, 
	U32 RemainByte ;
	IntHDLCStatus = HSTATA ;
	Clear_PendingBit(nHDLCRxA_INT) ;
	RxFail = 0 ;

#if MODE == DMA
	if(IntHDLCStatus & DRxFD){
		gHRxStatus[HDLCA].DMARxFD++ ;
		HSTATA = IntHDLCStatus & DRxFD ;
		
		if(IntHDLCStatus & RxFV){
			gHRxStatus[HDLCA].RxFValid++ ;	
			HSTATA = IntHDLCStatus & DRxFD ;
		}
		if(IntHDLCStatus & RxCRCE) {
			gHRxStatus[HDLCA].RxCRCErr++ ;
			HSTATA = IntHDLCStatus & DRxFD ;
		}
		pRxBDPtr = HDMARXPTRA ;
		gFrameCount[HDLCA]++;
	
		if(!gMultiTransfer) {
			if (!CheckRxStatusHDLC(HDLCA, pRxBDPtr)) RxFail = 1;
		}
	}

	if(IntHDLCStatus & (RxMOV|DRxNL|DRxNO)){//DMARxEN is cleared.
		if(IntHDLCStatus & RxMOV) {
			gHRxStatus[HDLCA].DMARxMOV++ ; 
			HSTATA = IntHDLCStatus & RxMOV ;
			RxFail = 1;
			put_byte('M') ;
		}	
		if(IntHDLCStatus & DRxNL) {
			gHRxStatus[HDLCA].DMARxNL++ ;
			HSTATA = IntHDLCStatus & DRxNL ;
			RxFail = 1;
			put_byte('N') ;
		}	
		if(IntHDLCStatus & DRxNO) {
			gHRxStatus[HDLCA].DMARxNO++ ;
			HSTATA = IntHDLCStatus & RxNO ;
			RxFail = 1;
			put_byte('O') ;
		}
		//HDMARxEN(HDLCA) ;
		//HDMARXPTRA = gCRxBDStartA ; 
	}	

	if(IntHDLCStatus & RxOV) put_byte('.') ;

	// 99.1.3 such
	if (RxFail) Print("\r HDLCA Rx Fail") ;
#else
	if(IntHDLCStatus & (RxFA|RxFV))
	{   
		if(IntHDLCStatus & RxFA)
		  *gUserArea[HDLCA]++ = HRXFIFOA ;
		if(IntHDLCStatus & RxFV)
		{   //put_byte('r') ;

			gHdlcRxDone = 1 ;
			gHRxStatus[HDLCA].RxFValid++ ; 
			RemainByte = IntHDLCStatus & 0xf;

			if(RemainByte ==  RxRB1) 
				*gUserArea[HDLCA]++ = HRXFIFOA & 0xFF000000 ;	
			if(RemainByte ==  RxRB2) 
				*gUserArea[HDLCA]++ = HRXFIFOA & 0xFFFF0000 ;	
			if(RemainByte ==  RxRB3) 
				*gUserArea[HDLCA]++ = HRXFIFOA & 0xFFFFFF00 ;	
			if(RemainByte ==  RxRB4) 
				*gUserArea[HDLCA]++ = HRXFIFOA & 0xFFFFFFFF ;	
			if(!CheckRxCPU()) {
				RxFail = 1 ;
				gRxFail = 1 ;
			}
			PrintMemTestStatus(RemainByte%4) ;
		}
	
	 
	if(IntHDLCStatus & RxCRCE) {
		gHRxStatus[HDLCA].RxCRCErr++ ;
		*gUserArea[HDLCA]++ = 0x0000ffff & HRXFIFOA ;
		RxFail = 1 ;
	}
	if(IntHDLCStatus & RxOV) {
		gHRxStatus[HDLCA].RxOverrun++ ;
		put_byte('O') ;
		RxFail = 1 ;
	}
	if (RxFail) Print("\r HDLCA Rx Fail") ;
  }
#endif
}

void HDLCRxB_isr(void)
{
	U32 IntHDLCStatus, pRxBDPtr ;
	U32 RxFail ;
	//U32 CheckStatus, 
	U32 RemainByte ;

	IntHDLCStatus = HSTATB ;
	//HSTATB = IntHDLCStatus ;
	Clear_PendingBit(nHDLCRxB_INT) ;
	RxFail = 0 ;


#if MODE == DMA
	if(IntHDLCStatus & DRxFD){
		gHRxStatus[HDLCB].DMARxFD++ ;
		HSTATB = IntHDLCStatus & DRxFD ;
	}	
	pRxBDPtr = HDMARXPTRB ;
	gFrameCount[HDLCB]++;

	if(!gMultiTransfer) {
		if (!CheckRxStatusHDLC(HDLCB, pRxBDPtr)) RxFail = 1;
	}
		//while(!(get_byte()=='q'))
		//		MemoryDump() ;
		//gHdlcRxDone = 1;

		//99.1.3 such
	if(IntHDLCStatus & (RxMOV|DRxNL|DRxNO)){//DMARxEN is cleared.
		if(IntHDLCStatus & RxMOV) {
			gHRxStatus[HDLCB].DMARxMOV++ ; 
			HSTATB = IntHDLCStatus & RxMOV ;
			RxFail = 1;
		}	
		if(IntHDLCStatus & DRxNL) {
			gHRxStatus[HDLCB].DMARxNL++ ;
			HSTATB = IntHDLCStatus & DRxNL ;
			RxFail = 1;
		}	
		if(IntHDLCStatus & DRxNO) {
			gHRxStatus[HDLCB].DMARxNO++ ;
			HSTATB = IntHDLCStatus & RxNO ;
			RxFail = 1;
		}
		HDMARxEN(HDLCB) ;//cjw. need to check, this line can be 
						//operated in CheckRxStatus()
		HDMARXPTRB = gCRxBDStart[HDLCB] ; 
	}	

	// 99.1.3 such
	if (RxFail) Print("\r HDLCB Rx Fail") ;
#else
	if(IntHDLCStatus & (RxFA|RxFV))
	{   
		if(IntHDLCStatus & RxFA)
		  *gUserArea[HDLCB]++ = HRXFIFOB ;
		if(IntHDLCStatus & RxFV)
		{   
			gHdlcRxDone = 2 ;
			gHRxStatus[HDLCB].RxFValid++ ; 
			RemainByte = IntHDLCStatus & 0xf;

			if(RemainByte ==  RxRB1) 
				*gUserArea[HDLCB]++ = HRXFIFOB & 0xFF000000 ;	
			if(RemainByte ==  RxRB2) 
				*gUserArea[HDLCB]++ = HRXFIFOB & 0xFFFF0000 ;	
			if(RemainByte ==  RxRB3) 
				*gUserArea[HDLCB]++ = HRXFIFOB & 0xFFFFFF00 ;	
			if(RemainByte ==  RxRB4) 
				*gUserArea[HDLCB]++ = HRXFIFOB & 0xFFFFFFFF ;	
			if(!CheckRxCPU()) {
				RxFail = 1 ;
				gRxFail = 1 ;
			}
			PrintMemTestStatus(RemainByte%4) ;
		}
		//if(IntHDLCStatus & RxFA)
		  //*gUserAreaB++ = HRXFIFOB ;
	
	 
	if(IntHDLCStatus & RxCRCE) {
		gHRxStatus[HDLCB].RxCRCErr++ ;
		*gUserArea[HDLCB]++ = 0x0000ffff & HRXFIFOB ;
		RxFail = 1 ;
	}
	if(IntHDLCStatus & RxOV) {
		gHRxStatus[HDLCB].RxOverrun++ ;
		put_byte('O') ;
		RxFail = 1 ;
	}
	if (RxFail) Print("\r HDLCB Rx Fail") ;
  }
#endif
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久av资源网| 日韩成人精品在线| www.亚洲色图.com| 国产精品毛片无遮挡高清| 成人av在线电影| 亚洲欧洲成人av每日更新| 成人av在线电影| 夜夜揉揉日日人人青青一国产精品| 欧美最新大片在线看| 午夜久久久久久久久| 欧美tk丨vk视频| 成人黄色小视频在线观看| 亚洲人成小说网站色在线| 欧美三级日韩三级国产三级| 男人操女人的视频在线观看欧美 | 欧美aaaaa成人免费观看视频| 日韩欧美在线网站| 国产精品996| 亚洲伦理在线精品| 欧美一级xxx| 国产成人亚洲综合a∨婷婷| 一区二区三区鲁丝不卡| 欧美一级淫片007| 国产.欧美.日韩| 亚洲成年人影院| 久久久国产综合精品女国产盗摄| 91美女福利视频| 久久99热狠狠色一区二区| 亚洲女性喷水在线观看一区| 精品人伦一区二区色婷婷| 91美女片黄在线观看91美女| 九九精品一区二区| 亚洲乱码国产乱码精品精的特点| 精品日韩一区二区三区| 国产精品成人一区二区三区夜夜夜| 91视频精品在这里| 九九精品视频在线看| 亚洲乱码日产精品bd| 国产亚洲成年网址在线观看| 色婷婷激情久久| 国产一区二区免费在线| 亚洲成a人在线观看| 国产精品美女一区二区| 日韩午夜av一区| 91福利视频在线| 成人免费视频caoporn| 免费av成人在线| 一区二区三区在线看| 国产日韩精品一区二区浪潮av| 欧美绝品在线观看成人午夜影视| proumb性欧美在线观看| 寂寞少妇一区二区三区| 亚洲午夜电影在线| 亚洲日本va午夜在线影院| 久久影音资源网| 日韩一区二区在线播放| 日本久久精品电影| 成人午夜激情视频| 久久99国产精品麻豆| 丝袜亚洲精品中文字幕一区| 亚洲一区二区三区四区在线观看| 国产精品欧美精品| 久久精品视频免费观看| 日韩视频免费观看高清完整版在线观看 | 亚洲丝袜制服诱惑| www国产成人免费观看视频 深夜成人网| 欧美亚洲综合色| 在线观看成人免费视频| 一本大道久久精品懂色aⅴ| 粉嫩嫩av羞羞动漫久久久| 国产精品资源网站| 国产一区二区三区电影在线观看| 男人的j进女人的j一区| 欧美aⅴ一区二区三区视频| 视频一区二区不卡| 视频一区欧美日韩| 日韩电影免费在线看| 美女精品自拍一二三四| 免费成人在线观看视频| 麻豆成人久久精品二区三区小说| 人禽交欧美网站| 久久99国产精品久久| 韩国欧美国产1区| 国产酒店精品激情| 国产精品一线二线三线| 粉嫩蜜臀av国产精品网站| 成人免费高清视频在线观看| 成人av动漫在线| 色综合天天综合狠狠| 欧美亚洲国产bt| 91精品国产色综合久久久蜜香臀| 欧美精品在线一区二区| 精品久久国产字幕高潮| 日本一区二区三区在线观看| 国产精品午夜在线| 一个色妞综合视频在线观看| 日韩精品一二三四| 国产自产高清不卡| 成人在线视频一区| 欧亚洲嫩模精品一区三区| 日韩精品中文字幕一区二区三区| 久久视频一区二区| 亚洲欧洲精品成人久久奇米网| 一二三四区精品视频| 久久精品72免费观看| 成人av在线一区二区| 在线影院国内精品| 亚洲精品在线免费播放| 中文字幕久久午夜不卡| 亚洲欧洲精品一区二区三区| 午夜欧美视频在线观看| 国产九九视频一区二区三区| 91在线观看成人| 91精品国产品国语在线不卡| 2019国产精品| 亚洲一区电影777| 国模冰冰炮一区二区| 91麻豆成人久久精品二区三区| 4438成人网| 亚洲欧洲韩国日本视频| 久久福利资源站| 日本久久一区二区| 国产视频一区二区在线| 亚洲成人福利片| 成人午夜av电影| 日韩你懂的在线播放| 亚洲视频你懂的| 国内精品不卡在线| 欧美午夜寂寞影院| 欧美极品少妇xxxxⅹ高跟鞋 | 在线视频国内一区二区| 精品三级在线观看| 亚洲一区二区三区中文字幕在线| 国产伦精品一区二区三区视频青涩 | 国产精品亚洲一区二区三区妖精| 欧美少妇一区二区| 国产精品天干天干在线综合| 日韩黄色免费电影| 欧美性色欧美a在线播放| 国产精品亲子乱子伦xxxx裸| 久久精品国产99国产精品| 欧美色电影在线| 亚洲欧美中日韩| 国产精品亚洲午夜一区二区三区 | 久久五月婷婷丁香社区| 丝袜诱惑亚洲看片| 色婷婷久久久久swag精品| 久久久久久久免费视频了| 三级精品在线观看| 在线观看av一区二区| 亚洲色图在线播放| 国产精品亚洲综合一区在线观看| 日韩三级av在线播放| 亚洲v精品v日韩v欧美v专区| 色老头久久综合| 亚洲欧洲精品天堂一级| 不卡的av在线| 国产女人18毛片水真多成人如厕 | 韩国精品主播一区二区在线观看 | 午夜精品福利在线| 色天天综合色天天久久| 国产精品美女视频| 成人免费高清在线| 国产精品美女一区二区三区| 成人在线综合网| 国产精品天干天干在观线| 成人网男人的天堂| 亚洲国产精品黑人久久久| 国产91丝袜在线播放九色| 欧美国产精品一区二区三区| 国产盗摄女厕一区二区三区 | 99精品视频在线观看| 国产精品区一区二区三区| 成人天堂资源www在线| 国产精品动漫网站| 91丨九色porny丨蝌蚪| 亚洲欧洲无码一区二区三区| av在线不卡电影| 亚洲激情欧美激情| 欧美日本一区二区在线观看| 视频精品一区二区| 日韩精品一区二区三区在线| 精品一区二区三区视频在线观看| 精品国产乱码久久久久久久久| 国产在线播精品第三| 国产色综合久久| 91香蕉视频黄| 午夜精品久久久久久久蜜桃app| 欧美一区二区在线看| 精品一二三四在线| 国产精品国产三级国产有无不卡 | 成人免费在线视频| 欧美日韩另类一区| 国产一区二区网址| 最新成人av在线| 91精品国产欧美一区二区| 国产在线视视频有精品| 亚洲欧洲一区二区三区| 欧美一区二区三区四区在线观看| 国产成人免费视频|