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

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

?? hspdif.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 2 頁
字號:
		// DMA Enable & Next Request Enable

		dwValue = DCMDR_DMEN;
		dma_SetCommand(pOpen->pTxDma, dwValue);

		pOpen -> pInfo -> dwStatus |= SPDIF_TRANSMITTING;
	}
	return dwWritten;
}

/*++

StopTransmitting :

The DMA controller is stopped.
Then, SPDIF transmitting is canceled.

--*/
BOOL
StopTransmitting(
	PSPDIF_OPEN_INFO pOpen
	)
{
SPDIFControlRegister cr;
	if ( pOpen -> pInfo -> dwStatus & SPDIF_TRANSMITTING ){
		cr.AsDWORD = READ_REGISTER_ULONG(pOpen -> pInfo -> pvControl);
		cr.bits.TME = 0;
		cr.bits.TDE = 0;
		WRITE_REGISTER_ULONG(pOpen -> pInfo -> pvControl, cr.AsDWORD);
		pOpen -> pInfo -> dwStatus &= ~SPDIF_TRANSMITTING;

		dma_Stop(pOpen->pTxDma);

		DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:Transmission was stopped.\r\n")));
	}
	return TRUE;
}

#pragma optimize("", off)
/*++

SPDIF_FillBuffer :

Copy transmit data to a transmitting buffer.

--*/
BOOL
SPDIF_FillBuffer(
	PSPDIF_OPEN_INFO pOpen
	)
{
//DWORD	dwLastDataSize;
//DWORD	dwCopyDataSize;
DWORD	dwFillOffset = 0;
PVBYTE	pvOutBuff = (pOpen -> pvOutBufferBase + (pOpen -> dwTxFlipBuff * SPDIF_OUT_DMA_PAGE_SIZE));
BOOL	bReturn = TRUE;
DWORD	dmy;

	EnterCriticalSection( &(pOpen -> TxCS) );

//	DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:++FillBuffer BufferRemainder[%x] Size[%x] TransmittedSize[%x]\r\n"),
//			 pOpen -> dwTxRemainOffset, pOpen -> dwOutReqSize, pOpen -> dwTransmitted));
	
	if ( pOpen -> dwOutWorkWPtr != pOpen -> dwOutWorkTPtr ){
		ConvertTo32Bits(pOpen);
		if ( pOpen -> dwOutWorkWPtr == pOpen -> dwOutWorkTPtr ){
			bReturn = FALSE;
		}
		pOpen -> dwTxFlipBuff = 1 - pOpen -> dwTxFlipBuff;
	}else{
		memset((PVOID)pvOutBuff, 0, SPDIF_OUT_DMA_PAGE_SIZE);
		bReturn = FALSE;
		pOpen -> dwTxFlipBuff = 1 - pOpen -> dwTxFlipBuff;
		pOpen -> dwTxWork = 0;
		pOpen -> dwTxShiftPtr = 0;

		DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:Writing 0 to a transmitting buffer.\r\n")));
//		RETAILMSG(1, (TEXT("SPDIF:Writing 0 to a transmitting buffer.\r\n")));
	}
	dmy = *(pvOutBuff + SPDIF_OUT_DMA_PAGE_SIZE - sizeof(DWORD));
//	DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:--FillBuffer BufferRemainder[%x] Size[%x] TransmittedSize[%x]\r\n"),
//			 pOpen -> dwTxRemainOffset, pOpen -> dwOutReqSize, pOpen -> dwTransmitted));
	LeaveCriticalSection( &(pOpen -> TxCS) );
	return bReturn;
}
#pragma optimize("", on)

/*++

FillWorkBuffer :

Write PCM data passed from application

--*/
DWORD
FillWorkBuffer(
	PSPDIF_OPEN_INFO pOpen,
	PVOID pBuff,
	DWORD dwSize
	)
{
DWORD i = 0;

	if ( pOpen -> dwTxSampleSize == SPDIF_SAMPLE_BIT_SIZE_16 ){
		PUSHORT	pSrc = (PUSHORT)pBuff;
		for( i=0;i < dwSize; ){
			if ( ((pOpen -> dwOutWorkWPtr+2) & (SPDIF_WORK_OBUFFER_SIZE-1)) == pOpen -> dwOutWorkTPtr ){
				ResetEvent( pOpen -> hTxWaitEvent );
				if ( WaitForSingleObject(pOpen -> hTxWaitEvent, 1000) == WAIT_TIMEOUT ){
					break;
				}
			}
			WRITE_REGISTER_USHORT((pOpen -> pvOutWorkBuffer + pOpen -> dwOutWorkWPtr), *(pSrc++));
			pOpen -> dwOutWorkWPtr += sizeof(USHORT);
			pOpen -> dwOutWorkWPtr &= (SPDIF_WORK_OBUFFER_SIZE-1);
			i += sizeof(USHORT);
		}
	}else{
		PDWORD	pSrc = (PDWORD)pBuff;
		for( i=0;i < dwSize; ){
			if ( ((pOpen -> dwOutWorkWPtr+4) & (SPDIF_WORK_OBUFFER_SIZE-1)) == pOpen -> dwOutWorkTPtr ){
				ResetEvent( pOpen -> hTxWaitEvent );
				if ( WaitForSingleObject(pOpen -> hTxWaitEvent, 1000) == WAIT_TIMEOUT ){
					break;
				}
			}
			WRITE_REGISTER_ULONG((PVBYTE)(pOpen -> pvOutWorkBuffer + pOpen -> dwOutWorkWPtr), *(pSrc++));
			pOpen -> dwOutWorkWPtr += sizeof(DWORD);
			pOpen -> dwOutWorkWPtr &= (SPDIF_WORK_OBUFFER_SIZE-1);
			i += sizeof(DWORD);
		}
	}
	return i;
}


DWORD
SPDIFInterruptThread(
	PSPDIF_DRIVER_INFO pSpdif
	)
{

	while( TRUE ){

		if ( WaitForSingleObject(pSpdif -> hInterrupt, INFINITE) == WAIT_TIMEOUT ){
			continue;
		}

		if ( pSpdif -> pvGlobal -> dwTxStatus ){
			if ( pSpdif -> hTxEvent ){
				SetEvent( pSpdif -> hTxEvent );
			}
			pSpdif -> pvGlobal -> dwTxStatus = 0;
		}
		if ( pSpdif -> pvGlobal -> dwRxStatus ){
			if ( pSpdif -> hRxEvent ){
				SetEvent( pSpdif -> hRxEvent );
			}
			pSpdif -> pvGlobal -> dwRxStatus = 0;
		}
		InterruptDone(SYSINTR_HSPDIF);
	}
	DEBUGMSG(SPDIF_TEST, (TEXT("End an interruption thread.\r\n")));

	return 0;
}

/*++

SPDIFInterruptThreadTx :

Interrupt service thread for TX

--*/

DWORD
SPDIFInterruptThreadTx(
	PSPDIF_OPEN_INFO pOpen
	)
{

	while( pOpen -> bTxThread == TRUE ){
		if ( WaitForSingleObject(pOpen -> pInfo -> hTxEvent, 3000) == WAIT_TIMEOUT ){
			continue;
		}
		if ( pOpen -> bTxThread != TRUE ){
			break;
		}
		if ( SPDIF_FillBuffer( pOpen ) == FALSE ){
		}
		SetEvent( pOpen -> hTxWaitEvent );

		DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:Transmit interrupt occurred.\r\n")));

	}
	DEBUGMSG(SPDIF_TEST, (TEXT("End an interruption thread.\r\n")));

	return 0;
}



/*++

SPDIF_ReceivingData :

Perform data reception.
When receiving for the first time, start DMA and SPDIF.

--*/
DWORD
SPDIF_ReceivingData(
	PSPDIF_OPEN_INFO pOpen,
	PVOID pBuff,
	DWORD dwSize
	)
{
DWORD	dwLoop = 0;
DWORD	dwValue;
	if ( !(pOpen -> dwAccess & GENERIC_READ) ){
		return 0;
	}

	if ( !(pOpen -> pInfo -> dwStatus & SPDIF_RECEIVING) ){
		SPDIFControlRegister cr;

		pOpen -> dwRxShiftPtr = 0;
		pOpen -> dwRxWork = 0;
		pOpen -> dwRxFlipBuff = 0;
		if ( pOpen -> dwRxSampleSize == SPDIF_SAMPLE_BIT_SIZE_20 ){
			pOpen -> RxBits = &ConvBitsRx20[0];
		}else if ( pOpen -> dwRxSampleSize == SPDIF_SAMPLE_BIT_SIZE_24 ){
			pOpen -> RxBits = &ConvBitsRx24[0];
		}

		// DMA Control Register Setting

		dwValue		=	DCR_DTAMD_PIN		|
						DCR_DTAC_DISABLE	|
						DCR_DTAU_BYTE		|
						DCR_BTMD_DISABLE	|
						DCR_PKMD_DISABLE	|
						DCR_CT_ENABLE		|
						DCR_ACMD_ENABLE		|
						DCR_DIP_2PAGE		|
						DCR_SMDL_PERIPHERAL	|
						DCR_SPDAM_FIX		|
						DCR_SDRMD_MODULE	|
						DCR_SPDS_32BIT		|
						DCR_DMDL_MEMORY		|
						DCR_DPDAM_INCREMENT	|
						DCR_DDRMD_MODULE	|
						DCR_DPDS_32BIT		;

		dma_SetControl(pOpen->pRxDma, dwValue);

		// DMA-TransferCompleteInterrupt Enable

		dma_InterruptEnable(pOpen->pRxDma);

		cr.AsDWORD = READ_REGISTER_ULONG(pOpen -> pInfo -> pvControl);
		cr.bits.AOS  = 1; // Audio only samples
//		cr.bits.NCSI = 1; // New channel status information
		cr.bits.RME  = 1; // Recieve module enable
		cr.bits.RDE  = 1; // Recieve dma enable
		cr.bits.RASS = pOpen -> dwRxSampleSize; // Recieve audio samlple bit size

		WRITE_REGISTER_ULONG(pOpen -> pInfo -> pvControl, cr.AsDWORD);

		// DMA Enable & Next Request Enable

		dwValue = DCMDR_DMEN;
		dma_SetCommand(pOpen->pRxDma, dwValue);

		pOpen -> pInfo -> dwStatus |= SPDIF_RECEIVING;
	}

	return GetWorkBuffer(pOpen, pBuff, dwSize);

}

/*++

GetWorkBuffer :



--*/
DWORD
GetWorkBuffer(
	PSPDIF_OPEN_INFO pOpen,
	PVOID pBuff,
	DWORD dwSize
	)
{
DWORD i = 0;

	if ( pOpen -> dwTxSampleSize == SPDIF_SAMPLE_BIT_SIZE_16 ){
		PUSHORT	pSrc = (PUSHORT)pBuff;
		for( i=0;i < dwSize; ){
			if ( pOpen -> dwInWorkRPtr == pOpen -> dwInWorkWPtr ){
				ResetEvent( pOpen -> hRxWaitEvent );
				if ( WaitForSingleObject(pOpen -> hRxWaitEvent, 1000) == WAIT_TIMEOUT ){
					break;
				}
				if ( pOpen -> dwInWorkRPtr == pOpen -> dwInWorkWPtr ){
					break;
				}
			}
			*(pSrc++) = READ_REGISTER_USHORT((pOpen -> pvInWorkBuffer + pOpen -> dwInWorkRPtr));
			pOpen -> dwInWorkRPtr += sizeof(USHORT);
			pOpen -> dwInWorkRPtr &= (SPDIF_WORK_IBUFFER_SIZE-1);
			i += sizeof(USHORT);
		}
	}else{
		PDWORD	pSrc = (PDWORD)pBuff;
		for( i=0;i < dwSize; ){
			if ( pOpen -> dwInWorkRPtr == pOpen -> dwInWorkWPtr ){
				ResetEvent( pOpen -> hRxWaitEvent );
				if ( WaitForSingleObject(pOpen -> hRxWaitEvent, 1000) == WAIT_TIMEOUT ){
					break;
				}
				if ( pOpen -> dwInWorkRPtr == pOpen -> dwInWorkWPtr ){
					break;
				}
			}
			*(pSrc++) = READ_REGISTER_USHORT((pOpen -> pvInWorkBuffer + pOpen -> dwInWorkRPtr));
			pOpen -> dwInWorkRPtr += sizeof(DWORD);
			pOpen -> dwInWorkRPtr &= (SPDIF_WORK_IBUFFER_SIZE-1);
			i += sizeof(DWORD);
		}
	}
	return i;
}


/*++

StopReceiving :

The DMA controller is stopped.
Then, SPDIF receiving is canceled.

--*/
BOOL
StopReceiving(
	PSPDIF_OPEN_INFO pOpen
	)
{
SPDIFControlRegister cr;
	if ( pOpen -> pInfo -> dwStatus & SPDIF_RECEIVING ){

		cr.AsDWORD = READ_REGISTER_ULONG(pOpen -> pInfo -> pvControl);
		cr.bits.RME = 0;
		cr.bits.RDE = 0;
		WRITE_REGISTER_ULONG(pOpen -> pInfo -> pvControl, cr.AsDWORD);
        
		dma_Stop(pOpen->pRxDma);

		pOpen -> pInfo -> dwStatus &= ~SPDIF_RECEIVING;

		DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:Reception was stopped.\r\n")));
	}
	return TRUE;
}

/*++

SPDIF_GetData :

Copy receive data from a receiving buffer.

--*/

BOOL
SPDIF_GetData(
	PSPDIF_OPEN_INFO pOpen
	)
{
PVBYTE	pvInBuff = (pOpen -> pvInBufferBase + (pOpen -> dwRxFlipBuff * SPDIF_IN_DMA_PAGE_SIZE));

	EnterCriticalSection( &(pOpen -> RxCS) );
	ConvertFrom32Bits(pOpen);
	pOpen -> dwRxFlipBuff = 1 - pOpen -> dwRxFlipBuff;
	LeaveCriticalSection( &(pOpen -> RxCS) );
	return TRUE;

}


/*++

SPDIFInterruptThreadRx :

Interrupt service thread for RX

--*/

DWORD
SPDIFInterruptThreadRx(
	PSPDIF_OPEN_INFO pOpen
	)
{

	while( pOpen -> bRxThread == TRUE ){
		if ( WaitForSingleObject(pOpen -> pInfo -> hRxEvent, 3000) == WAIT_TIMEOUT ){
			continue;
		}
		if ( pOpen -> bRxThread != TRUE ){
			break;
		}
		if ( SPDIF_GetData( pOpen ) == FALSE ){
		}
		SetEvent( pOpen -> hRxWaitEvent );
	}
	return 0;
}



/*++

SPDIF_StopTransmit :

Perform transmitting processing.
Execution of this function stops a transmitting clock.

--*/
VOID
SPDIF_StopTransmit(
	PSPDIF_OPEN_INFO pOpen
	)
{

	DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:Stop transmitting\r\n")));
	StopTransmitting(pOpen);
}

/*++

SPDIF_StopReceive :

Perform receiving processing.
Execution of this function stops a receiving clock.

--*/
VOID
SPDIF_StopReceive(
	PSPDIF_OPEN_INFO pOpen
	)
{
	StopReceiving(pOpen);
}

/*++

ConvertTo32Bits :

Data to transmit is 32 bits although demand data is 16, 20, and 24 bits.
So, perform data conversion to 32 bits.

--*/
VOID
ConvertTo32Bits(
	PSPDIF_OPEN_INFO pOpen
	)
{
PVDWORD	pOutBuff = (PVDWORD)(pOpen -> pvOutBufferBase + (pOpen -> dwTxFlipBuff * SPDIF_OUT_DMA_PAGE_SIZE));
DWORD	i;

	if ( pOpen -> dwTxSampleSize == SPDIF_SAMPLE_BIT_SIZE_16 ){
		for( i=0;i < SPDIF_OUT_DMA_PAGE_SIZE; ){
			if ( pOpen -> dwOutWorkTPtr != pOpen -> dwOutWorkWPtr ){
				*(pOutBuff++) = (DWORD)(READ_REGISTER_USHORT(((PVBYTE)(pOpen -> pvOutWorkBuffer+pOpen -> dwOutWorkTPtr))));
				pOpen -> dwOutWorkTPtr += 2;
				pOpen -> dwOutWorkTPtr &= (SPDIF_WORK_OBUFFER_SIZE-1);
			}else{
				*(pOutBuff++) = 0;
			}
			i += sizeof(DWORD);
		}
	}else{
		PBITS_CONVERSION Convert;
		Convert = pOpen -> TxBits + pOpen -> dwTxShiftPtr;
		for( i=0;i < SPDIF_OUT_DMA_PAGE_SIZE;){
			if ( pOpen -> dwOutWorkTPtr != pOpen -> dwOutWorkWPtr ){
				if ( Convert -> dwDirection == SHIFT_N ){
					DWORD	dwWork = READ_REGISTER_ULONG(((PVBYTE)(pOpen -> pvOutWorkBuffer + pOpen -> dwOutWorkTPtr)));
					pOpen -> dwTxWork |= dwWork & Convert -> dwData;
				}else if ( Convert -> dwDirection == SHIFT_L ){
					DWORD	dwWork = READ_REGISTER_ULONG(((PVBYTE)(pOpen -> pvOutWorkBuffer + pOpen -> dwOutWorkTPtr)));
					pOpen -> dwTxWork |= (dwWork & Convert -> dwData) << Convert -> dwShift;
				}else{
					DWORD	dwWork = READ_REGISTER_ULONG(((PVBYTE)(pOpen -> pvOutWorkBuffer + pOpen -> dwOutWorkTPtr)));
					pOpen -> dwTxWork |= (dwWork & Convert -> dwData) >> Convert -> dwShift;
				}
			}else{
//				pOpen -> dwTxWork = 0;
				*(pOutBuff++) = 0;
				i += sizeof(DWORD);
				continue;
			}
			if ( Convert -> dwInc & INC_SRC ){
				pOpen -> dwOutWorkTPtr += sizeof(DWORD);
				pOpen -> dwOutWorkTPtr &= (SPDIF_WORK_OBUFFER_SIZE-1);
			}
			if ( Convert -> dwInc & INC_DST ){
				*(pOutBuff++) = pOpen -> dwTxWork;
				pOpen -> dwTxWork = 0;
				i += sizeof(DWORD);
			}
			if ( Convert -> dwInc == (INC_SRC|INC_DST) ){
				pOpen -> dwTxShiftPtr = 0;
				Convert = pOpen -> TxBits;
			}else{
				Convert++;
				pOpen -> dwTxShiftPtr ++;
			}
		}
	}
}

/*++

ConvertFrom32Bits :

Although data to receive is 32 bits, data to return is 16, 20 or 24 bits.
So, perform data conversion to 16, 20 or 24 bits.

--*/
VOID
ConvertFrom32Bits(
	PSPDIF_OPEN_INFO pOpen
	)
{
PVDWORD	pInBuff = (PVDWORD)(pOpen -> pvInBufferBase + (pOpen -> dwRxFlipBuff * SPDIF_IN_DMA_PAGE_SIZE));
DWORD	i;
	if ( pOpen -> dwRxSampleSize == SPDIF_SAMPLE_BIT_SIZE_16 ){
		for( i=0;i < SPDIF_IN_DMA_PAGE_SIZE; ){
			WRITE_REGISTER_USHORT(((PVBYTE)(pOpen -> pvInWorkBuffer + pOpen -> dwInWorkWPtr)), (USHORT)*(pInBuff++));
			pOpen -> dwInWorkWPtr += sizeof(USHORT);
			pOpen -> dwInWorkWPtr &= (SPDIF_WORK_IBUFFER_SIZE-1);
			i += sizeof(DWORD);
		}
	}else{
		PBITS_CONVERSION Convert;
		Convert = pOpen -> RxBits + pOpen -> dwRxShiftPtr;
		for( i=0;i < SPDIF_IN_DMA_PAGE_SIZE;){
			if ( Convert -> dwDirection == SHIFT_N ){
				pOpen -> dwRxWork |= *pInBuff & Convert -> dwData;
			}else if ( Convert -> dwDirection == SHIFT_L ){
				pOpen -> dwRxWork |= (*pInBuff & Convert -> dwData) << Convert -> dwShift;
			}else{
				pOpen -> dwRxWork |= (*pInBuff & Convert -> dwData) >> Convert -> dwShift;
			}
			if ( Convert -> dwInc & INC_SRC ){
				pInBuff ++;
				i += sizeof(DWORD);
			}
			if ( Convert -> dwInc & INC_DST ){
				WRITE_REGISTER_ULONG(((PVBYTE)(pOpen -> pvInWorkBuffer + pOpen -> dwInWorkWPtr)), pOpen -> dwRxWork);
				pOpen -> dwInWorkWPtr += sizeof(DWORD);
				pOpen -> dwInWorkWPtr &= (SPDIF_WORK_IBUFFER_SIZE-1);
				pOpen -> dwRxWork = 0;
			}
			if ( Convert -> dwInc == (INC_SRC|INC_DST) ){
				pOpen -> dwRxShiftPtr = 0;
				Convert = pOpen -> RxBits;
			}else{
				Convert++;
				pOpen -> dwRxShiftPtr ++;
			}
		}
	}
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
人人爽香蕉精品| 日韩视频在线永久播放| 欧美无砖砖区免费| 91精品国产欧美一区二区18 | 国产日韩综合av| 亚洲日本青草视频在线怡红院 | 一区二区三区鲁丝不卡| 久久精品免费观看| 国产高清久久久久| 欧美特级限制片免费在线观看| 精品国产免费一区二区三区四区| 久久成人麻豆午夜电影| 国产精品1区二区.| 精品在线免费观看| 精品久久久久久久人人人人传媒 | 精品国精品国产尤物美女| 欧美成人a在线| 日韩国产在线一| 日韩亚洲欧美在线观看| 丝袜美腿亚洲综合| 欧美久久免费观看| 亚洲国产wwwccc36天堂| 欧美日本免费一区二区三区| 678五月天丁香亚洲综合网| 中文无字幕一区二区三区| 亚洲国产一区二区视频| 日韩你懂的电影在线观看| 中文字幕高清一区| 久久国产精品区| 日韩美女视频一区二区在线观看| 水蜜桃久久夜色精品一区的特点 | 欧美性大战xxxxx久久久| 日韩一区二区三区四区| 91精品国产全国免费观看| 视频一区欧美精品| 久久久天堂av| 人人精品人人爱| 在线观看成人小视频| 久久久精品综合| 亚洲一区二区三区国产| 成人在线视频首页| 精品国内二区三区| 午夜影院在线观看欧美| 国产精品69毛片高清亚洲| 日韩欧美国产高清| 日本va欧美va精品发布| 欧美日韩视频在线观看一区二区三区 | 国产人成亚洲第一网站在线播放 | 天天av天天翘天天综合网| av在线免费不卡| 久久免费精品国产久精品久久久久| 日韩精品高清不卡| 一本大道av伊人久久综合| 91精品国产免费| 午夜国产精品一区| 色天使色偷偷av一区二区| 国产精品无人区| 国产suv精品一区二区883| 欧美韩日一区二区三区四区| 粉嫩绯色av一区二区在线观看 | 国产一区二区在线影院| 久久免费偷拍视频| 成人h动漫精品一区二| 日韩一区有码在线| 成人美女在线观看| 亚洲图片另类小说| www.激情成人| 亚洲欧美偷拍三级| 欧美日韩精品一二三区| 国产毛片精品视频| 亚洲婷婷综合色高清在线| 日本高清视频一区二区| 免费观看一级特黄欧美大片| 久久精品一区四区| 国产福利一区二区三区视频| 亚洲精品久久久蜜桃| 欧美年轻男男videosbes| 亚洲一二三专区| 欧美剧情电影在线观看完整版免费励志电影| 日韩经典一区二区| 久久色在线视频| 色综合久久久久网| 欧美aⅴ一区二区三区视频| 亚洲欧美自拍偷拍色图| 欧美日韩精品高清| 视频精品一区二区| 欧美国产乱子伦| 欧美剧情片在线观看| 国产成人精品午夜视频免费| 国产精品欧美一区喷水| 欧美怡红院视频| 五月婷婷综合网| 国产清纯白嫩初高生在线观看91| 在线观看日产精品| 国产一区二区三区免费| 亚洲香蕉伊在人在线观| 中文字幕亚洲电影| 91麻豆精品91久久久久同性| 成人在线一区二区三区| 亚洲亚洲人成综合网络| 久久精品无码一区二区三区| 91碰在线视频| 久久99精品国产麻豆不卡| 一区二区三区免费网站| 久久久精品欧美丰满| 欧美日韩日本视频| 丁香婷婷综合五月| 久国产精品韩国三级视频| 91久久国产最好的精华液| 日本中文字幕一区二区视频 | 欧美日韩一区精品| 国产欧美综合色| 免费观看久久久4p| 2024国产精品| 欧美日韩二区三区| 日韩精品一区二区三区老鸭窝| 午夜精品久久久久久久久久| 日韩美女精品在线| 久久久久国产精品麻豆ai换脸| 在线免费视频一区二区| 成人高清在线视频| 亚洲高清在线视频| 久久久久久一二三区| 欧美成人a视频| 精品国产亚洲在线| 欧美福利一区二区| 91精品久久久久久久99蜜桃| 欧美伊人久久久久久久久影院 | 久久99国产精品麻豆| 亚洲成人tv网| 国产精品伦理在线| 国产色一区二区| 国产欧美一区二区精品性色| 国产精品毛片久久久久久| 国产欧美一区二区三区沐欲| 亚洲四区在线观看| 亚洲欧洲韩国日本视频| 亚洲一区二区三区三| 一区二区在线免费| 亚洲一区二区美女| 免费高清不卡av| 国内精品第一页| www.亚洲色图.com| 99久久久久久99| 欧美人动与zoxxxx乱| 欧美卡1卡2卡| 欧美日韩精品福利| 国产欧美中文在线| 中文字幕亚洲区| 日本不卡一二三| 国产黄色成人av| 色婷婷综合久久| 51午夜精品国产| 精品不卡在线视频| 中文字幕一区二区不卡| 日韩av成人高清| 国产高清亚洲一区| 欧美欧美欧美欧美首页| 欧美美女直播网站| 久久精品一区四区| 亚洲精品日韩专区silk| 久久国产精品免费| 91网上在线视频| 欧美日韩国产首页| 国产精品乱人伦一区二区| 国产精品视频麻豆| 美女视频免费一区| 波多野结衣在线aⅴ中文字幕不卡| 欧美日韩一级大片网址| 久久综合给合久久狠狠狠97色69| 国产精品成人免费在线| 午夜精品视频在线观看| 成人妖精视频yjsp地址| 欧美日本在线一区| 亚洲欧美色图小说| 蜜桃av噜噜一区二区三区小说| 色欧美日韩亚洲| 欧美一区二区三区影视| 悠悠色在线精品| 国产一区二区主播在线| 8x8x8国产精品| 精品少妇一区二区三区视频免付费| 国产精品人人做人人爽人人添| 亚洲国产成人91porn| 粗大黑人巨茎大战欧美成人| 3d成人h动漫网站入口| 亚洲人成电影网站色mp4| 国产盗摄一区二区| 91麻豆精品国产91久久久久久久久 | 日韩影院精彩在线| 国产91丝袜在线播放| 555www色欧美视频| 国产精品麻豆一区二区| 国产精品自拍av| 欧美色窝79yyyycom| 一区二区三区毛片| 91老师国产黑色丝袜在线| 老司机午夜精品| 91在线精品一区二区| 伊人色综合久久天天人手人婷|