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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hspdif.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright(C) Renesas Technology Corp. 2002-2004. All rights reserved.
//
// HSPDIF Driver for ITS-DS7
//
// FILE      : HSPDIF.C
// CREATED   : 2002.06.26
// MODIFIED  : 2004.09.01
// AUTHOR    : Renesas Technology Corp.
// HARDWARE  : RENESAS ITS-DS7
// HISTORY   : 
//             2003.06.20
//              - Created release code.
//                (based on HSPDIF driver for ITS-DS4 Ver.1.4.0 for WCEfA3.5)
//             2003.12.03
//              - The common DMA code is used.
//             2003.12.25
//              - Revised recording DMA initialize.
//             2004.09.01
//              - Created release code for WCE5.0.
//

#define WINCEMACRO 1
#include <windows.h>
#include <oalintr.h>
#include <excpt.h>
#include "platform.h"
#include "drv_glob.h"
#include "sh7770.h"
#include "hspdif.h"
#include "hspdifdbg.h"
#include "ioctl_its_ds7.h"

/* Operate the row of bits */
BITS_CONVERSION	ConvBitsTx20[] = {
{0xfffff000, 12, SHIFT_R, INC_DST},{0x00000fff,  8, SHIFT_L, INC_SRC},
{0xff000000, 24, SHIFT_R, INC_DST},{0x00fffff0,  4, SHIFT_R, INC_DST},
{0x0000000f, 16, SHIFT_L, INC_SRC},{0xffff0000, 16, SHIFT_R, INC_DST},
{0x0000ffff,  4, SHIFT_L, INC_SRC},{0xf0000000, 28, SHIFT_R, INC_DST},
{0x0fffff00,  8, SHIFT_R, INC_DST},{0x000000ff, 12, SHIFT_L, INC_SRC},
{0xfff00000, 20, SHIFT_R, INC_DST},{0x000fffff,  0, SHIFT_N, INC_SRC|INC_DST}};
BITS_CONVERSION	ConvBitsTx24[] = {
{0xffffff00,  8, SHIFT_R, INC_DST},{0x000000ff, 16, SHIFT_L, INC_SRC},
{0xffff0000, 16, SHIFT_R, INC_DST},{0x0000ffff,  8, SHIFT_L, INC_SRC},
{0xff000000, 24, SHIFT_R, INC_DST},{0x00ffffff,  0, SHIFT_N, INC_DST|INC_SRC}};

BITS_CONVERSION	ConvBitsRx20[] = {
{0x000fffff, 12, SHIFT_L, INC_SRC},{0x000fff00,  8, SHIFT_R, INC_DST},
{0x000000ff, 24, SHIFT_L, INC_SRC},{0x000fffff,  4, SHIFT_L, INC_SRC},
{0x000f0000, 16, SHIFT_R, INC_DST},{0x0000ffff, 16, SHIFT_L, INC_SRC},
{0x000ffff0,  4, SHIFT_R, INC_DST},{0x0000000f, 28, SHIFT_L, INC_SRC},
{0x000fffff,  8, SHIFT_L, INC_SRC},{0x000ff000, 12, SHIFT_R, INC_DST},
{0x00000fff, 20, SHIFT_L, INC_SRC},{0x000fffff,  0, SHIFT_N, INC_SRC|INC_DST}};
BITS_CONVERSION	ConvBitsRx24[] = {
{0x00ffffff,  8, SHIFT_L, INC_SRC},{0x00ff0000, 16, SHIFT_R, INC_DST},
{0x0000ffff, 16, SHIFT_L, INC_SRC},{0x00ffff00,  8, SHIFT_R, INC_DST},
{0x000000ff, 24, SHIFT_L, INC_SRC},{0x00ffffff,  0, SHIFT_N, INC_SRC|INC_DST}};



/*++

DLLEntry :

This function is entry of DLL.

--*/
BOOL __stdcall
DllEntry(
	HINSTANCE	hinstDll,			// @param Instance pointer.
	DWORD		dwReason,			// @param Reason routine is called.
	LPVOID		lpReserved			// @param system parameter.
	)
{
	switch( dwReason ){
		case DLL_PROCESS_ATTACH :
			DEBUGREGISTER( hinstDll );
			break;
		case DLL_PROCESS_DETACH :
			break;
		default :
			break;
	}
	return TRUE;
}

/*++

SPD_Init :

This initializes SPDIF module and assigns the domain of a driver.

--*/
HANDLE
SPD_Init(
	DWORD	dwContext
	)
{
PSPDIF_DRIVER_INFO	pSpdif;
//DWORD dwRet;
HANDLE hThread;

	// The common area for drivers is acquired.
	pSpdif = (PSPDIF_DRIVER_INFO)VirtualAlloc(NULL, sizeof(SPDIF_DRIVER_INFO), MEM_COMMIT, PAGE_READWRITE);
	if ( pSpdif == NULL ){
		goto error_return;
	}
	pSpdif -> pvRegBase = (PVBYTE)VirtualAlloc(0, SPDIF_REGSIZE, MEM_RESERVE, PAGE_NOACCESS);
	if ( pSpdif -> pvRegBase == NULL ){
		goto error_return;
	}
	if ( !VirtualCopy((PVOID)pSpdif -> pvRegBase,
					(PVOID)SPDIF_REGBASE,
					SPDIF_REGSIZE,
					PAGE_READWRITE|PAGE_NOCACHE) ){
		goto error_return;
	}

	// The register of SPDIF is assigned.
	pSpdif -> pvControl = (PVULONG)(pSpdif -> pvRegBase+SPDIF_CTRL_OFFSET);
	pSpdif -> pvStatus = (PVULONG)(pSpdif -> pvRegBase+SPDIF_STAT_OFFSET);

	pSpdif -> pvGlobal = (PSPDIF_GLOBAL)VirtualAlloc(NULL, SPDIF_GLOBAL_SIZE, MEM_RESERVE, PAGE_NOACCESS);
	if ( pSpdif -> pvGlobal == NULL ){
		goto error_return;
	}
	if ( !VirtualCopy((PVOID)pSpdif -> pvGlobal,
				(PVOID)SPDIF_GLOBAL_BASE,
				SPDIF_GLOBAL_SIZE,
				PAGE_READWRITE|PAGE_NOCACHE) ){
		goto error_return;
	}
	pSpdif->pvGlobal -> dwTxStatus = 0;
	pSpdif->pvGlobal -> dwRxStatus = 0;


	pSpdif -> hInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);
	if ( !InterruptInitialize(SYSINTR_HSPDIF, pSpdif -> hInterrupt, NULL, 0) ){
		goto error_return;
	}
	hThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
					(LPTHREAD_START_ROUTINE)SPDIFInterruptThread,
					(PVOID)pSpdif, 0, NULL);
	if ( hThread == NULL ){
		goto error_return;
	}
	SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST);

	return pSpdif;

error_return:
	if ( pSpdif -> pvRegBase != NULL ){
		VirtualFree((PVOID)(pSpdif -> pvRegBase), SPDIF_REGSIZE, MEM_RELEASE);
	}
	if ( pSpdif -> pvGlobal != NULL ){
		VirtualFree((PVOID)(pSpdif -> pvGlobal), SPDIF_GLOBAL_SIZE, MEM_RELEASE);
	}
	if ( pSpdif != NULL ){
		VirtualFree((PVOID)pSpdif, sizeof(SPDIF_DRIVER_INFO), MEM_DECOMMIT);
	}
	return NULL;
}

/*++

SPD_Deinit :

The resources of a driver are released.

--*/
BOOL
SPD_Deinit(
	PSPDIF_DRIVER_INFO	pSpdif
	)
{
//DWORD dwRet;

	if ( pSpdif -> pvRegBase != NULL ){
		VirtualFree((PVOID)(pSpdif -> pvRegBase), SPDIF_REGSIZE, MEM_RELEASE);
	}
	if ( pSpdif -> pvGlobal != NULL ){
		VirtualFree((PVOID)(pSpdif -> pvGlobal), SPDIF_GLOBAL_SIZE, MEM_RELEASE);
	}
	if ( pSpdif != NULL ){
		VirtualFree(pSpdif, sizeof(SPDIF_DRIVER_INFO), MEM_DECOMMIT);
	}


	return TRUE;
}

/*++

SPD_Open

This function is specified in the attribute of Read or Write,
and processes the case where a driver is started from application.
This driver does processing according to the specified attribute.

--*/
HANDLE
SPD_Open(
	DWORD	dwData,
	DWORD	dwAccess,
	DWORD	dwShareMode
	)
{
PSPDIF_DRIVER_INFO	pSpdif = (PSPDIF_DRIVER_INFO)dwData;
PSPDIF_OPEN_INFO	pOpen=(PSPDIF_OPEN_INFO)0;
HANDLE	hThread;

	if ( (dwAccess & (GENERIC_READ|GENERIC_WRITE)) & pSpdif -> dwAccessOwner ){
		DEBUGMSG(SPDIF_ERROR, (TEXT("SPDIF : Invalid access\r\n")));
		goto error_return;
	}
	pSpdif -> dwAccessOwner |= (dwAccess&(GENERIC_READ|GENERIC_WRITE));

	pOpen = LocalAlloc(LPTR, sizeof(SPDIF_OPEN_INFO));
	if ( !pOpen ){
		goto error_return;
	}
	pOpen -> pInfo = pSpdif;
	pOpen -> dwAccess = dwAccess;
	pOpen -> dwShareMode = dwShareMode;

	if ( dwAccess & GENERIC_WRITE ){

		dma_Init(CH_TX_HSPDIF, &pOpen->pTxDma);

		dma_SetPort(pOpen->pTxDma, DPTR_DDPT_HSPDIF);

		dma_SetPage(pOpen->pTxDma,
							0,										// Page No. 0
							SPDIF_OUT_BUFFER_BASE,					// Src address
							SPDIF_REGBASE+SPDIF_TDAD_OFFSET,		// Dst address
							(DWORD)(SPDIF_OUT_DMA_PAGE_SIZE>>2));	// Buf size

		dma_SetPage(pOpen->pTxDma,
							1,										// Page No. 0
																	// Src address
							SPDIF_OUT_BUFFER_BASE+SPDIF_OUT_DMA_PAGE_SIZE,
							SPDIF_REGBASE+SPDIF_TDAD_OFFSET,		// Dst address
							(DWORD)(SPDIF_OUT_DMA_PAGE_SIZE>>2));	// Buf size

		pSpdif -> hTxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		if ( pSpdif -> hTxEvent == NULL ){
			goto error_return;
		}

		pOpen -> hTxWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		if ( pOpen -> hTxWaitEvent == NULL ){
			goto error_return;
		}

		pOpen -> pvOutBufferBase = VirtualAlloc(NULL, SPDIF_OUT_DMA_PAGE_SIZE<<1, MEM_RESERVE, PAGE_NOACCESS);
		if ( pOpen -> pvOutBufferBase == NULL ){
			goto error_return;
		}
		if ( !VirtualCopy((PVOID)pOpen -> pvOutBufferBase,
					(PVOID)SPDIF_OUT_BUFFER_BASE,
					SPDIF_OUT_DMA_PAGE_SIZE<<1,
					PAGE_READWRITE|PAGE_NOCACHE) ){
			goto error_return;
		}

		pOpen -> pvOutWorkBuffer = VirtualAlloc(NULL, SPDIF_WORK_OBUFFER_SIZE, MEM_RESERVE, PAGE_NOACCESS);
		if ( pOpen -> pvOutWorkBuffer == NULL ){
			goto error_return;
		}
		if ( !VirtualCopy((PVOID)pOpen -> pvOutWorkBuffer,
				(PVOID)(SPDIF_WORK_OBUFFER_BASE),
				SPDIF_WORK_OBUFFER_SIZE,
				PAGE_READWRITE|PAGE_NOCACHE) ){
			goto error_return;
		}
		pOpen -> dwOutWorkWPtr = 0;
		pOpen -> dwOutWorkTPtr = 0;

		pOpen -> bTxThread = TRUE;

		hThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
						(LPTHREAD_START_ROUTINE)SPDIFInterruptThreadTx,
						(PVOID)pOpen, 0, NULL);
		if ( hThread == NULL ){
			goto error_return;
		}
		SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST);

		InitializeCriticalSection( &(pOpen -> TxCS) );
	}
	if ( dwAccess & GENERIC_READ ){

		dma_Init(CH_RX_HSPDIF, &pOpen->pRxDma);

		dma_SetPort(pOpen->pRxDma, DPTR_SDPT_HSPDIF);

		dma_SetPage(pOpen->pRxDma,
							0,										// Page No. 0
							SPDIF_REGBASE+SPDIF_RDAD_OFFSET,		// Src address
							SPDIF_IN_BUFFER_BASE,					// Dst address
							(DWORD)(SPDIF_IN_DMA_PAGE_SIZE>>2));	// Buf size

		dma_SetPage(pOpen->pRxDma,
							1,										// Page No. 0
							SPDIF_REGBASE+SPDIF_RDAD_OFFSET,		// Src address
																	// Dst address
							SPDIF_IN_BUFFER_BASE+SPDIF_IN_DMA_PAGE_SIZE,
							(DWORD)(SPDIF_IN_DMA_PAGE_SIZE>>2));	// Buf size

		pSpdif -> hRxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		if ( pSpdif -> hRxEvent == NULL ){
			goto error_return;
		}

		pOpen -> hRxWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
		if ( pOpen -> hRxWaitEvent == NULL ){
			goto error_return;
		}

		pOpen -> pvInBufferBase = VirtualAlloc(NULL, SPDIF_IN_DMA_PAGE_SIZE<<1, MEM_RESERVE, PAGE_NOACCESS);
		if ( pOpen -> pvInBufferBase == NULL ){
			goto error_return;
		}
		if ( !VirtualCopy((PVOID)pOpen -> pvInBufferBase,
					(PVOID)SPDIF_IN_BUFFER_BASE,
					SPDIF_IN_DMA_PAGE_SIZE<<1,
					PAGE_READWRITE|PAGE_NOCACHE) ){
			goto error_return;
		}

		pOpen -> pvInWorkBuffer = VirtualAlloc(NULL, SPDIF_WORK_IBUFFER_SIZE, MEM_RESERVE, PAGE_NOACCESS);
		if ( pOpen -> pvInWorkBuffer == NULL ){
			goto error_return;
		}
		if ( !VirtualCopy((PVOID)pOpen -> pvInWorkBuffer,
				(PVOID)(SPDIF_WORK_IBUFFER_BASE),
				SPDIF_WORK_IBUFFER_SIZE,
				PAGE_READWRITE|PAGE_NOCACHE) ){
			goto error_return;
		}
		pOpen -> dwInWorkWPtr = 0;
		pOpen -> dwInWorkRPtr = 0;

		pOpen -> bRxThread = TRUE;

		hThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0,
						(LPTHREAD_START_ROUTINE)SPDIFInterruptThreadRx,
						(PVOID)pOpen, 0, NULL);
		if ( hThread == NULL ){
			goto error_return;
		}
		SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST);

		InitializeCriticalSection( &(pOpen -> RxCS) );
	}

	return pOpen;

error_return:
	if ( pOpen ){

		if(pOpen->pTxDma)
			dma_Deinit(pOpen->pTxDma);

		if(pOpen->pTxDma)
			dma_Deinit(pOpen->pRxDma);

		SPD_Close(pOpen);
	}
	return NULL;
}

/*++

SPD_Close :

The resources gained by the SPD_Init function are released.

--*/
BOOL
SPD_Close(
	PSPDIF_OPEN_INFO	pOpen
	)
{
PSPDIF_DRIVER_INFO	pSpdif = pOpen -> pInfo;

	if ( pOpen -> dwAccess & GENERIC_WRITE ){
		StopTransmitting(pOpen);
		pOpen -> bTxThread = FALSE;

		SetEvent(pSpdif -> hTxEvent);

		if ( pOpen -> pvOutBufferBase ){
			VirtualFree((PVOID)pOpen -> pvOutBufferBase, SPDIF_OUT_DMA_PAGE_SIZE<<1, MEM_RELEASE);
		}
		if ( pOpen -> pvOutWorkBuffer ){
			VirtualFree((PVOID)pOpen -> pvOutWorkBuffer, SPDIF_WORK_OBUFFER_SIZE, MEM_RELEASE);
		}

		dma_Deinit(pOpen->pTxDma);

		if ( pSpdif -> hTxEvent ){
			CloseHandle(pSpdif-> hTxEvent);
		}
		if ( pOpen -> hTxWaitEvent ){
			CloseHandle(pOpen -> hTxWaitEvent);
		}
	}
	if ( pOpen -> dwAccess & GENERIC_READ ){
		StopReceiving(pOpen);
		pOpen -> bRxThread = FALSE;

		SetEvent(pSpdif -> hRxEvent);

		if ( pOpen -> pvInBufferBase ){
			VirtualFree((PVOID)pOpen -> pvInBufferBase, SPDIF_IN_DMA_PAGE_SIZE<<1, MEM_RELEASE);
		}
		if ( pOpen -> pvInWorkBuffer ){
			VirtualFree((PVOID)pOpen -> pvInWorkBuffer, SPDIF_WORK_IBUFFER_SIZE, MEM_RELEASE);
		}

		dma_Deinit(pOpen->pRxDma);

		if ( pSpdif -> hRxEvent ){
			CloseHandle(pSpdif -> hRxEvent);
		}
		if ( pOpen -> hRxWaitEvent ){
			CloseHandle(pOpen -> hRxWaitEvent);
		}
	}
	pSpdif -> dwAccessOwner &= ~pOpen -> dwAccess;
	LocalFree(pOpen);
	return TRUE;
}

// The following function groups do not use.
DWORD SPD_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes){return 0;}
DWORD SPD_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes){return 0;}
DWORD SPD_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod){return 0;}
void SPD_PowerUp(PVOID p)
{
}
void SPD_PowerDown(PVOID p)
{
}

/*++

SPD_IOControl :



--*/
BOOL
SPD_IOControl(
	DWORD	dwHandle,
	DWORD	dwCode,
	PVOID	pBufIn,
	DWORD	dwLenIn,
	PVOID	pBufOut,
	DWORD	dwLenOut,
	PDWORD	pdwActualOut
	)
{
	*pdwActualOut = 0;
	switch( dwCode ){
		case IOCTL_SPDIF_TRANSMITTING_DATA:
			*pdwActualOut = SPDIF_TransmittingData((PSPDIF_OPEN_INFO)dwHandle, pBufIn, dwLenIn);
			break;
		case IOCTL_SPDIF_RECEIVING_DATA:
			*pdwActualOut = SPDIF_ReceivingData((PSPDIF_OPEN_INFO)dwHandle, pBufOut, dwLenOut);
			break;
		case IOCTL_SPDIF_STOP_TRANSMIT:
			SPDIF_StopTransmit((PSPDIF_OPEN_INFO)dwHandle);
			break;
		case IOCTL_SPDIF_STOP_RECEIVE:
			SPDIF_StopReceive((PSPDIF_OPEN_INFO)dwHandle);
			break;
		case IOCTL_SPDIF_SET_TXSAMPLE_SIZE:
			if ( *((PDWORD)pBufIn) > SPDIF_SAMPLE_BIT_SIZE_24 ){
				*pdwActualOut = 0xffffffff;
			}else{
				((PSPDIF_OPEN_INFO)dwHandle) -> dwTxSampleSize = *((PDWORD)pBufIn);
			}
			break;
		case IOCTL_SPDIF_GET_TXSAMPLE_SIZE:
			*((PDWORD)pBufOut) = ((PSPDIF_OPEN_INFO)dwHandle) -> dwTxSampleSize;
			break;
		case IOCTL_SPDIF_SET_RXSAMPLE_SIZE:
			if ( *((PDWORD)pBufIn) > SPDIF_SAMPLE_BIT_SIZE_24 ){
				*pdwActualOut = 0xffffffff;
			}else{
				((PSPDIF_OPEN_INFO)dwHandle) -> dwRxSampleSize = *((PDWORD)pBufIn);
			}
			break;
		case IOCTL_SPDIF_GET_RXSAMPLE_SIZE:
			*((PDWORD)pBufOut) = ((PSPDIF_OPEN_INFO)dwHandle) -> dwRxSampleSize;
			break;
		default :
			return FALSE;
	}
	return TRUE;
}


/*++

SPDIF_TransmittingData :

Perform data transmission.
When transmitting for the first time, start DMA and SPDIF.

--*/
DWORD
SPDIF_TransmittingData(
	PSPDIF_OPEN_INFO pOpen,
	PVOID pBuff,
	DWORD dwSize
	)
{
DWORD	dwLoop = 0;
DWORD	dwWritten;
DWORD	dwValue;

	if ( !(pOpen -> dwAccess & GENERIC_WRITE) ){
		return 0;
	}

	dwWritten = FillWorkBuffer(pOpen, pBuff, dwSize);

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

		DEBUGMSG(SPDIF_TEST, (TEXT("SPDIF:Start transmission processing.\r\n")));
		pOpen -> dwTxShiftPtr = 0;
		pOpen -> dwTxWork = 0;
		pOpen -> dwTxFlipBuff = 0;
		if ( pOpen -> dwTxSampleSize == SPDIF_SAMPLE_BIT_SIZE_20 ){
			pOpen -> TxBits = &ConvBitsTx20[0];
		}else if ( pOpen -> dwTxSampleSize == SPDIF_SAMPLE_BIT_SIZE_24 ){
			pOpen -> TxBits = &ConvBitsTx24[0];
		}
		if ( SPDIF_FillBuffer( pOpen ) == TRUE ){
			SPDIF_FillBuffer( pOpen );
		}

		// 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_MEMORY		|
						DCR_SPDAM_INCREMENT	|
						DCR_SDRMD_MODULE	|
						DCR_SPDS_32BIT		|
						DCR_DMDL_PERIPHERAL	|
						DCR_DPDAM_FIX		|
						DCR_DDRMD_MODULE	|
						DCR_DPDS_32BIT		;

		dma_SetControl(pOpen->pTxDma, dwValue);

		// DMA-TransferCompleteInterrupt Enable

		dma_InterruptEnable(pOpen->pTxDma);

		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.TME  = 1; // Transmitter module enable
		cr.bits.TDE  = 1; // Transmitter dma enable
		cr.bits.TASS = pOpen -> dwTxSampleSize; // Transmitter audio samlple bit size
		WRITE_REGISTER_ULONG(pOpen -> pInfo -> pvControl, cr.AsDWORD);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕视频一区| 精品久久久久久久久久久久包黑料 | 国产成人8x视频一区二区| 成人理论电影网| 欧美在线啊v一区| 91精品国产综合久久久久久漫画| 欧美成人bangbros| 亚洲精品国产一区二区精华液 | 色呦呦国产精品| 91麻豆精品国产91久久久久久 | 欧美影院一区二区| 精品国内片67194| 亚洲女同女同女同女同女同69| 亚洲国产精品尤物yw在线观看| 国产一区二区在线免费观看| 99国产精品久久久久久久久久久| 欧美另类一区二区三区| 国产日韩av一区二区| 亚洲成a人片综合在线| 成人蜜臀av电影| 欧美一二三四在线| 亚洲在线中文字幕| 不卡欧美aaaaa| 欧美一区二区久久| 亚洲国产色一区| 成人性生交大片免费看中文 | 在线精品视频一区二区| 欧美一区二区三区视频免费| 亚洲一区二区三区在线播放| 国产成人啪午夜精品网站男同| 欧美精品一区二区在线播放| 婷婷综合另类小说色区| 欧美日韩一区二区三区高清| 亚洲欧洲日本在线| 丁香六月综合激情| 国产精品国产自产拍高清av | 国产xxx精品视频大全| 欧美一区二区高清| 日日摸夜夜添夜夜添国产精品 | 国产亚洲精品7777| 美女被吸乳得到大胸91| 6080午夜不卡| 亚洲成av人影院| 天天综合网 天天综合色| 在线区一区二视频| 一区二区三区精品在线观看| av中文字幕在线不卡| 中文文精品字幕一区二区| 国产一区二区调教| 久久久夜色精品亚洲| 激情五月播播久久久精品| 88在线观看91蜜桃国自产| 一区二区三区在线免费| 91看片淫黄大片一级| 亚洲人成小说网站色在线| 91亚洲精品乱码久久久久久蜜桃 | 欧美日韩一本到| 亚洲成人tv网| 在线播放日韩导航| 三级精品在线观看| 欧美成人精品3d动漫h| 狠狠久久亚洲欧美| 国产亲近乱来精品视频| 99久久精品国产导航| 亚洲精品视频免费观看| 欧美午夜免费电影| 亚洲一区在线免费观看| 欧美日韩aaaaaa| 蜜臀av国产精品久久久久 | 老司机免费视频一区二区三区| 日本韩国精品在线| 日韩影院精彩在线| 国产三级一区二区| 91蝌蚪porny九色| 蜜桃av一区二区三区电影| 久久女同精品一区二区| 91麻豆免费观看| 欧美a级一区二区| 久久久午夜精品理论片中文字幕| 不卡的av电影在线观看| 美腿丝袜亚洲综合| 亚洲视频中文字幕| 欧美日韩国产乱码电影| 成人激情动漫在线观看| 亚洲va欧美va人人爽| 亚洲三级电影全部在线观看高清| 欧美日韩精品系列| 91视频在线观看| 国内精品免费**视频| 综合欧美一区二区三区| 欧美精品一区二区三区四区 | 成人午夜精品一区二区三区| 亚洲午夜电影网| 日韩毛片精品高清免费| 日韩三级高清在线| 色婷婷av一区| 国产精品亚洲专一区二区三区| 一区二区三区在线免费| 日本一二三四高清不卡| 91精品一区二区三区在线观看| 成人爱爱电影网址| 免费高清不卡av| 中文字幕精品综合| 欧美一级免费大片| 欧美影视一区二区三区| 成人精品视频一区二区三区| 老司机精品视频导航| 国产精品美日韩| 精品国产露脸精彩对白| 欧美色图第一页| 丰满亚洲少妇av| 黄色精品一二区| 日本在线播放一区二区三区| 亚洲精品一卡二卡| 国产欧美日韩不卡免费| 欧美v日韩v国产v| 欧美久久久久免费| 欧美视频中文一区二区三区在线观看| 国产精品123| 国产一区福利在线| 国内精品视频一区二区三区八戒| 天天爽夜夜爽夜夜爽精品视频| 一卡二卡三卡日韩欧美| 国产婷婷色一区二区三区四区 | 久久久91精品国产一区二区精品 | 国产精品自拍在线| 麻豆成人久久精品二区三区红| 亚洲第一成人在线| 亚洲电影一级黄| 亚洲影视在线观看| 亚洲激情av在线| 一区二区三区欧美| 国产乱码精品一区二区三区五月婷| 亚洲影院久久精品| 亚洲国产精品一区二区久久| 日韩中文字幕区一区有砖一区| 午夜精彩视频在线观看不卡| 亚洲一区二区在线观看视频| 日韩专区在线视频| 日本成人中文字幕在线视频| 精品一区中文字幕| 国产乱人伦精品一区二区在线观看 | 国产美女主播视频一区| 国产一区二区三区香蕉| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 蜜乳av一区二区| 国产精品996| 色婷婷久久久综合中文字幕| 色综合天天综合网天天狠天天| 91激情在线视频| 欧美视频中文一区二区三区在线观看| 波多野结衣中文一区| 在线精品视频小说1| 欧美情侣在线播放| 久久久久国产一区二区三区四区| 中文一区一区三区高中清不卡| 国产精品丝袜在线| 日韩激情中文字幕| 国产精品1区二区.| 日韩一区和二区| 亚洲国产精品v| 美女在线视频一区| 豆国产96在线|亚洲| 91精品蜜臀在线一区尤物| 国产视频一区不卡| 亚洲自拍偷拍综合| 国产成人在线观看免费网站| 国产成人8x视频一区二区 | 国产精品麻豆网站| 午夜一区二区三区视频| 岛国一区二区在线观看| 欧美日韩在线电影| 亚洲欧洲成人自拍| 免费不卡在线视频| 99国产精品久久久久| 91欧美一区二区| 欧美日韩一区不卡| 国产精品毛片大码女人| 亚洲成av人片一区二区梦乃 | 国内偷窥港台综合视频在线播放| 色狠狠一区二区三区香蕉| 精品久久久久99| 日韩精品色哟哟| 一本一道波多野结衣一区二区 | 91丨porny丨在线| 日韩片之四级片| 日韩精品欧美精品| 色综合天天综合在线视频| 国产精品精品国产色婷婷| 另类小说图片综合网| 欧美日韩精品久久久| 亚洲精品视频一区二区| 97精品国产97久久久久久久久久久久 | 95精品视频在线| 久久精品人人做人人综合| 精品一区二区三区不卡| 欧美一区二区三区在线电影| 中文字幕佐山爱一区二区免费| 成人午夜av电影| 久久久99精品免费观看不卡|