亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲丶国产丶欧美一区二区三区| 中文一区二区完整视频在线观看| 国产一区二区三区免费观看| 亚洲日本免费电影| 欧美不卡激情三级在线观看| 色综合天天性综合| 国产美女在线精品| 成人亚洲一区二区一| 日韩欧美国产电影| 欧美写真视频网站| 成人国产精品免费观看动漫| 久久国产欧美日韩精品| 天天操天天色综合| 亚洲男人的天堂一区二区| 精品动漫一区二区三区在线观看| 欧美探花视频资源| 91亚洲精品久久久蜜桃| 国产mv日韩mv欧美| 裸体歌舞表演一区二区| 亚洲h在线观看| 美腿丝袜一区二区三区| ...xxx性欧美| 中文字幕在线一区免费| 久久久久久久综合日本| 26uuu亚洲| 日韩手机在线导航| 91麻豆精品国产| 欧美日韩一区国产| 欧美亚洲高清一区| 91蜜桃网址入口| 91在线观看美女| 99热精品一区二区| 99精品国产99久久久久久白柏| 18欧美乱大交hd1984| 麻豆91在线观看| 亚洲成av人片一区二区梦乃 | 日韩欧美另类在线| 欧美日韩国产电影| 欧美视频在线一区二区三区| 在线视频国内自拍亚洲视频| 欧美视频一区二区三区| 欧美日韩在线一区二区| 欧美精品久久一区二区三区| 欧美日韩国产片| 欧美精品粉嫩高潮一区二区| 在线不卡欧美精品一区二区三区| 欧美日韩免费一区二区三区| 欧美一a一片一级一片| 欧美综合一区二区三区| 欧美日韩一本到| 欧美一区二区私人影院日本| 日韩美女天天操| 久久久久亚洲蜜桃| 中文字幕欧美三区| 亚洲欧美区自拍先锋| 亚洲人成网站色在线观看| 亚洲视频免费在线| 香蕉av福利精品导航| 蜜桃一区二区三区四区| 激情伊人五月天久久综合| 国产福利91精品一区二区三区| 国产成人av自拍| 色综合久久久久网| 3d成人h动漫网站入口| 久久一夜天堂av一区二区三区| 中文一区在线播放| 亚洲妇女屁股眼交7| 久久丁香综合五月国产三级网站| 国产大陆精品国产| 色综合久久66| 精品欧美一区二区三区精品久久| 久久久91精品国产一区二区三区| 17c精品麻豆一区二区免费| 日韩精品五月天| 国产成人精品免费在线| 欧美中文字幕亚洲一区二区va在线 | 亚洲最新视频在线播放| 日韩成人午夜电影| 成人免费视频播放| 欧美日韩电影在线| 国产精品私房写真福利视频| 亚洲一区二区综合| 国产一区二区在线观看免费| 色av成人天堂桃色av| 欧美变态凌虐bdsm| 亚洲欧美日韩国产综合| 麻豆国产精品777777在线| 99国内精品久久| 2024国产精品| 亚洲国产欧美在线人成| 国产精品1024| 91精品国产入口| 亚洲视频资源在线| 国产真实乱偷精品视频免| 色欧美片视频在线观看 | 精品国精品自拍自在线| 亚洲精品成人在线| 国产999精品久久久久久绿帽| 欧美日韩免费在线视频| 中文字幕欧美一区| 国产精品一区免费视频| 欧美军同video69gay| 中文字幕日本不卡| 国产福利不卡视频| 欧美va亚洲va| 天天色天天爱天天射综合| 99精品视频在线播放观看| 久久久久88色偷偷免费| 日韩精品三区四区| 91官网在线观看| 国产精品国产三级国产aⅴ中文| 久久国产精品区| 91精品国产综合久久蜜臀| 亚洲综合图片区| 99久久伊人久久99| 国产片一区二区| 国产二区国产一区在线观看| 日韩一区二区不卡| 日韩成人精品在线| 在线一区二区三区四区五区| 最新国产の精品合集bt伙计| 国产成a人亚洲| 久久久久久亚洲综合| 国产一区二区三区最好精华液 | 国产婷婷一区二区| 精品在线一区二区三区| 欧美一个色资源| 日本网站在线观看一区二区三区| 欧美日韩亚洲综合一区| 亚洲成人一区二区在线观看| 色综合久久久久久久| 亚洲男人天堂av| 91天堂素人约啪| 亚洲欧洲制服丝袜| 大白屁股一区二区视频| 欧美国产亚洲另类动漫| 国产电影一区二区三区| 国产亚洲精久久久久久| 激情偷乱视频一区二区三区| 日韩精品中文字幕在线一区| 麻豆一区二区三| 亚洲精品在线免费观看视频| 蓝色福利精品导航| 久久久久国产成人精品亚洲午夜| 狠狠久久亚洲欧美| 国产日韩成人精品| 99久久er热在这里只有精品66| 日韩美女视频19| 日本道色综合久久| 亚州成人在线电影| 精品国产凹凸成av人导航| 国产麻豆精品95视频| 国产精品久久三| 欧美最猛性xxxxx直播| 天天影视涩香欲综合网| 日韩欧美国产精品| 国产精品91一区二区| 中文字幕一区二区三区蜜月| 在线视频综合导航| 蜜桃精品在线观看| 国产欧美日韩在线看| 91免费看片在线观看| 亚洲成av人片在www色猫咪| 欧美成人一区二区三区片免费 | 91天堂素人约啪| 亚洲成人免费观看| 日韩欧美123| 国产成人精品免费| 亚洲午夜久久久久久久久电影院 | 色婷婷精品久久二区二区蜜臂av| 亚洲国产中文字幕在线视频综合| 3751色影院一区二区三区| 国产成人免费高清| 亚洲国产日产av| 久久久久久97三级| 精品视频色一区| 国产精品一卡二卡在线观看| 亚洲乱码国产乱码精品精的特点| 91精品国产欧美一区二区成人| 国产超碰在线一区| 天天综合色天天| 国产精品入口麻豆九色| 在线不卡免费欧美| 91丨九色丨国产丨porny| 免费一级片91| 免费日本视频一区| 国产精品久久久久影院| 国产香蕉久久精品综合网| 91浏览器入口在线观看| 日本午夜精品一区二区三区电影| 国产精品网曝门| 日韩欧美亚洲一区二区| 99vv1com这只有精品| 欧美日韩高清一区二区不卡| 五月天网站亚洲| 国产精品久久久久aaaa| 日韩女优电影在线观看| 在线观看日韩av先锋影音电影院| 韩国女主播成人在线| 午夜在线成人av|