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

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

?? hspdif.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
//
// 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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久aaaa樱花| 国产最新精品精品你懂的| 中文字幕中文字幕在线一区| 欧美精品一区二区三区很污很色的| 欧美日韩国产一级二级| 欧美日韩你懂得| 欧美久久一区二区| 69堂成人精品免费视频| 3atv在线一区二区三区| 91精品在线观看入口| 91精品欧美一区二区三区综合在| 6080yy午夜一二三区久久| 欧美一区欧美二区| 精品久久久久香蕉网| 一区二区三区四区不卡在线 | 亚洲精品一二三| 日韩理论电影院| 一区二区三区蜜桃网| 亚洲高清视频在线| 日本不卡123| 狠狠色丁香久久婷婷综| 国产精品亚洲人在线观看| 成人精品视频网站| 欧美体内she精高潮| 日韩一区二区电影网| 久久久亚洲高清| 1000精品久久久久久久久| 一区二区高清免费观看影视大全| 亚洲图片欧美综合| 精品一二三四区| 99久久综合国产精品| 色8久久人人97超碰香蕉987| 91精品国产综合久久久蜜臀粉嫩 | 精品日韩在线一区| 国产欧美视频一区二区三区| 亚洲欧美另类久久久精品| 天天操天天干天天综合网| 韩日欧美一区二区三区| 99精品桃花视频在线观看| 56国语精品自产拍在线观看| 亚洲国产岛国毛片在线| 亚洲电影视频在线| 国产一区二区三区蝌蚪| 91黄色免费网站| 精品国产伦一区二区三区免费 | 极品美女销魂一区二区三区免费 | 久久夜色精品国产噜噜av| 亚洲日本乱码在线观看| 日本不卡一区二区三区 | 91精品国产乱| 国产精品美女久久久久久久 | 国产成人免费视频一区| 色嗨嗨av一区二区三区| 精品电影一区二区| 一区二区三区久久久| 国产精品一区在线观看乱码 | 国产精品电影一区二区三区| 日韩精品电影在线| 99国产欧美另类久久久精品| 欧美tickling挠脚心丨vk| 亚洲精选免费视频| 床上的激情91.| 日韩一级片网址| 一级日本不卡的影视| 国产成人免费高清| 欧美一区二区三级| 一区二区视频免费在线观看| 成人午夜大片免费观看| 日韩精品中午字幕| 一区二区不卡在线播放| 欧美丰满高潮xxxx喷水动漫| 一区二区中文字幕在线| 国产一区999| 欧美一级片在线| 亚洲国产成人tv| 91国内精品野花午夜精品| 国产免费成人在线视频| 捆绑调教一区二区三区| 欧美日韩一本到| 亚洲精品亚洲人成人网| 成人涩涩免费视频| 久久婷婷国产综合国色天香| 日韩不卡一区二区| 欧美视频在线一区二区三区 | 亚洲制服丝袜av| 一本大道综合伊人精品热热| 国产欧美视频一区二区| 国产在线视频一区二区三区| 精品久久久影院| 久色婷婷小香蕉久久| 欧美一区二区高清| 日韩高清不卡在线| 欧美一区二区视频网站| 午夜精品爽啪视频| 欧美色图天堂网| 亚洲图片欧美综合| 欧美日韩一级二级| 香蕉影视欧美成人| 欧美喷潮久久久xxxxx| 亚洲高清免费一级二级三级| 欧美日韩在线免费视频| 亚洲一区在线免费观看| 欧美日韩一本到| 天堂久久久久va久久久久| 欧美日韩综合在线免费观看| 亚洲五月六月丁香激情| 欧美日韩国产bt| 青青草原综合久久大伊人精品| 91精品国产欧美日韩| 麻豆精品在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 激情六月婷婷综合| 久久久久久黄色| 成人av资源下载| 亚洲精品国产视频| 欧美日韩1234| 麻豆91精品视频| 久久精品一区二区三区av| 丰满亚洲少妇av| 亚洲精品国产一区二区精华液| 欧亚一区二区三区| 日韩精品三区四区| 精品美女一区二区| av在线不卡免费看| 亚洲综合在线免费观看| 欧美一区二区三区啪啪| 国产精品正在播放| 亚洲天堂精品在线观看| 欧美视频中文字幕| 狠狠色综合日日| 国产精品家庭影院| 欧美日韩国产区一| 国产乱码精品一区二区三| 18成人在线观看| 欧美精品一二三| 国产iv一区二区三区| 亚洲卡通欧美制服中文| 欧美一区二区福利视频| 丁香婷婷综合色啪| 亚洲午夜在线电影| 久久夜色精品国产噜噜av | 国产午夜精品一区二区三区视频| av激情成人网| 日韩福利视频网| 欧美国产成人精品| 欧美精品一级二级| 成人国产在线观看| 日本色综合中文字幕| 中文字幕一区二区不卡| 欧美一区二区在线免费观看| 成人动漫一区二区三区| 日韩中文字幕av电影| 欧美国产日本韩| 在线成人免费观看| 成人av免费在线播放| 美女视频黄频大全不卡视频在线播放| 中文字幕免费观看一区| 6080国产精品一区二区| 91在线小视频| 国内精品在线播放| 亚洲成在线观看| 欧美国产97人人爽人人喊| 欧美一区二区三区思思人| 91麻豆免费看| 国产精品一区二区不卡| 天堂午夜影视日韩欧美一区二区| 国产精品青草综合久久久久99| 欧美一区二区三区四区高清| 色婷婷综合久色| 高清不卡一二三区| 日韩av在线播放中文字幕| 亚洲欧美另类小说视频| 国产人久久人人人人爽| 日韩一区二区三区视频在线 | 日韩理论电影院| 久久精品亚洲乱码伦伦中文| 欧美一区二区三区爱爱| 欧美在线观看禁18| 成人免费视频app| 国模一区二区三区白浆| 视频一区中文字幕| 一区二区三区日韩欧美| 国产精品色婷婷| 国产亚洲一二三区| 精品sm捆绑视频| 日韩精品最新网址| 欧美放荡的少妇| 欧美日韩国产经典色站一区二区三区 | 精品午夜一区二区三区在线观看| 亚洲成人av福利| 亚洲综合999| 一区二区三区中文字幕精品精品 | 天天影视色香欲综合网老头| 亚洲自拍偷拍综合| 一区二区在线看| 亚洲久草在线视频| 一区二区三区在线视频观看58| 国产精品短视频| 亚洲欧美日韩电影| 亚洲欧美另类久久久精品|