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

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

?? hdlc100init.c

?? ARM4510B下的HDLC程序原碼
?? 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麻豆精品国产91久久久| 精品国产区一区| 日韩一区和二区| 国产精品系列在线| 琪琪久久久久日韩精品| 大胆欧美人体老妇| 欧美一区二区精品在线| 亚洲精品中文字幕乱码三区| 精品在线亚洲视频| 欧美欧美午夜aⅴ在线观看| 国产精品色婷婷| 国产在线不卡一卡二卡三卡四卡| 欧美日韩免费在线视频| 中文字幕佐山爱一区二区免费| 老司机午夜精品| 欧美色欧美亚洲另类二区| 中文字幕在线观看一区| 国产成人精品www牛牛影视| 91麻豆精品久久久久蜜臀| 亚洲午夜日本在线观看| 91在线观看成人| 国产精品成人免费精品自在线观看| 久久精品免费观看| 欧美精品日日鲁夜夜添| 亚洲国产精品综合小说图片区| 91视视频在线观看入口直接观看www| 久久―日本道色综合久久| 日本成人中文字幕| 欧美美女一区二区三区| 亚洲国产精品尤物yw在线观看| 一本到高清视频免费精品| 1区2区3区欧美| 91亚洲精品久久久蜜桃| 亚洲天堂av老司机| 91玉足脚交白嫩脚丫在线播放| 日韩一区欧美小说| 91亚洲国产成人精品一区二三| 亚洲人成人一区二区在线观看| 波多野结衣欧美| 亚洲欧洲日韩av| 色欧美片视频在线观看在线视频| 亚洲三级电影网站| 欧美性大战久久| 奇米影视7777精品一区二区| 精品国产乱码久久久久久夜甘婷婷| 国产自产高清不卡| 久久精品欧美一区二区三区不卡 | 8x福利精品第一导航| 亚洲成人动漫av| 91精品蜜臀在线一区尤物| 激情综合亚洲精品| 中文一区在线播放| 91国偷自产一区二区使用方法| 亚洲图片欧美视频| 91精品国产一区二区三区蜜臀| 久久机这里只有精品| 国产蜜臀av在线一区二区三区| av男人天堂一区| 亚洲国产精品一区二区www| 欧美妇女性影城| 国产精品一二三四区| 亚洲免费伊人电影| 777亚洲妇女| 国产91精品一区二区麻豆网站| 亚洲色图欧洲色图婷婷| 这里只有精品99re| 高清成人免费视频| 日韩精品免费专区| 中文字幕av一区二区三区免费看| 欧美网站一区二区| 国产激情视频一区二区三区欧美 | 日本大胆欧美人术艺术动态| 久久免费视频色| 在线观看区一区二| 国产精品一区二区在线播放 | 2020国产精品自拍| 色乱码一区二区三区88| 久久精品噜噜噜成人av农村| 亚洲欧美日韩中文播放| 欧美大片在线观看一区二区| 99国产麻豆精品| 久久精品国产久精国产爱| 一区二区三区四区乱视频| 国产丝袜欧美中文另类| 欧美精品乱人伦久久久久久| 成人午夜免费电影| 另类调教123区| 亚洲二区在线观看| 亚洲欧洲三级电影| 久久久91精品国产一区二区精品| 欧美日韩一区二区在线观看视频 | 久久亚区不卡日本| 欧美日本韩国一区二区三区视频| 国产99久久久国产精品| 久久99精品久久久久久动态图| 亚洲综合激情网| 中文字幕乱码一区二区免费| 精品国产一区久久| 欧美日韩视频在线一区二区| 一本色道久久综合精品竹菊| 国产成人在线看| 精品一区中文字幕| 热久久免费视频| 天堂成人国产精品一区| 亚洲国产成人av| 亚洲黄色在线视频| 亚洲色图制服丝袜| 国产精品美女一区二区三区| 久久青草欧美一区二区三区| 欧美videossexotv100| 91精品啪在线观看国产60岁| 欧美在线啊v一区| 欧美影视一区在线| 在线观看www91| 91电影在线观看| 在线观看91精品国产入口| 欧洲视频一区二区| 日本福利一区二区| 在线中文字幕一区二区| 欧美亚洲国产一区在线观看网站| 91看片淫黄大片一级| 91亚洲精品久久久蜜桃网站| 91精品办公室少妇高潮对白| 欧美在线高清视频| 欧美精品v日韩精品v韩国精品v| 欧美精品第1页| 欧美大肚乱孕交hd孕妇| 欧美精品一区二区三区很污很色的| 亚洲精品一区二区三区在线观看 | 5858s免费视频成人| 日韩一区二区电影在线| 日韩欧美资源站| 久久日一线二线三线suv| 久久久精品国产免费观看同学| 亚洲国产精品av| 亚洲国产精品欧美一二99| 蜜臀精品一区二区三区在线观看 | 成人av影视在线观看| 色综合久久天天| 欧美福利视频一区| 久久亚洲私人国产精品va媚药| 国产精品福利影院| 亚洲韩国精品一区| 精品一区二区三区影院在线午夜| 国产ts人妖一区二区| 色综合一个色综合| 在线综合视频播放| 中文字幕乱码一区二区免费| 一级女性全黄久久生活片免费| 日本欧美一区二区在线观看| 国产精品1区2区3区在线观看| 99久久精品情趣| 欧美日韩高清在线| 国产欧美1区2区3区| 亚洲国产婷婷综合在线精品| 精品综合久久久久久8888| 91丝袜国产在线播放| 欧美成人a视频| 亚洲欧美国产三级| 久久国产免费看| 在线观看成人免费视频| 久久日韩粉嫩一区二区三区 | 在线免费观看成人短视频| 日韩欧美一二三区| 中文字幕人成不卡一区| 卡一卡二国产精品| 欧美视频日韩视频| 欧美国产一区在线| 麻豆精品在线播放| 欧美吻胸吃奶大尺度电影 | 欧美高清dvd| 中文字幕日本不卡| 韩国一区二区三区| 欧美乱妇20p| 亚洲人成小说网站色在线| 国产精一区二区三区| 91精品久久久久久久久99蜜臂| 亚洲欧洲成人精品av97| 久久99久久99精品免视看婷婷| 欧亚洲嫩模精品一区三区| 中文无字幕一区二区三区 | 欧美电影精品一区二区| 亚洲国产精品久久不卡毛片| 粉嫩av一区二区三区粉嫩| 精品久久久久99| 免费人成网站在线观看欧美高清| 色偷偷一区二区三区| 日韩一区在线免费观看| 色综合久久综合网| 久久蜜臀精品av| 黑人精品欧美一区二区蜜桃 | 欧美日韩专区在线| 亚洲伦理在线免费看| 成人高清视频在线| 欧美国产激情二区三区| 国产福利一区二区| 久久精品免费在线观看| 国产精品一区二区不卡| 国产日韩欧美电影| 风流少妇一区二区|