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

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

?? hsi.c

?? 三星 s3c6400測試代碼
?? C
字號:
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : hsi.c
*  
*	File Description : This file implements the API functions for MIPI HSI.
*
*	Author : Haksoo,Kim
*	Dept. : AP Development Team
*	Created Date : 2007/03/03
*	Version : 0.1 
* 
*	History
*	- Created(Haksoo,Kim 2007/03/03)
*  
**************************************************************************************/

#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "hsi.h"
#include "gpio.h"
#include "intc.h"
#include "dma.h"

//#define DBG_HSI
#ifdef DBG_HSI
	#define DbgHsi	Disp
#else
	#define DbgHsi(...)
#endif
//#define DBG_HSI_0
#ifdef DBG_HSI_0
	#define DbgHsi0	Disp
#else
	#define DbgHsi0(...)
#endif

//==========================
// MIPI HSI REGISTERS
//==========================
enum HSI_REGS
{
	//===================================
	// Tx Controller Registers
	rTX_STATUS_REG		= 0x7E006000,
	rTX_CONFIG_REG		= 0x7E006004,
	rTX_INTSRC_REG		= 0x7E00600C,
	rTX_INTMSK_REG		= 0x7E006010,
	rTX_SWRST_REG		= 0x7E006014,
	rTX_CHID_REG		= 0x7E006018,
	rTX_DATA_REG		= 0x7E00601C,
	
	//===================================
	// Rx Controller Registers
	rRX_STATUS_REG		= 0x7E007000,
	rRX_CONFIG0_REG		= 0x7E007004,
	rRX_CONFIG1_REG		= 0x7E007008,
	rRX_INTSRC_REG		= 0x7E00700C,
	rRX_INTMSK_REG		= 0x7E007010,
	rRX_SWRST_REG		= 0x7E007014,
	rRX_CHID_REG		= 0x7E007018,
	rRX_DATA_REG		= 0x7E00701C	
 };
 
#if 1	//070615
#define	TX_HOLD_TO_VAL		0xa
#define	TX_IDLE_TO_VAL		0x28
#define	TX_REQ_TO_VAL		0xff

#define RX_STATE_TO_VAL		0x30	//proper for normal cases
//#define RX_STATE_TO_VAL		0xff	//proper for using only rx-done intr.
#define RX_ACK_TO_VAL		0x80
#define RX_FIFO_TO_VAL1		0x100
#define RX_FIFO_TO_VAL2		0x10000

#else	//temp(maximum values)
#define	TX_HOLD_TO_VAL		0xff
#define	TX_IDLE_TO_VAL		0xff
#define	TX_REQ_TO_VAL		0xff

#define RX_STATE_TO_VAL		0x3ff
#define RX_ACK_TO_VAL		0xff
#define RX_FIFO_TO_VAL1		0xffffff
#define RX_FIFO_TO_VAL2		0xffffff
#endif

extern volatile u32 *g_uHsiTxData;
extern volatile u32 *g_uHsiRxData;

extern volatile bool bHsiTxDone;
extern volatile bool bHsiRxDone;

extern u32 g_uHsiPreTxCount;
extern u32 g_uHsiTxCount;
extern u32 g_uHsiRxCount;
extern u32 g_uHsiDmaTxCnt, g_uHsiDmaRxCnt;
extern HSI_DMA_RX_TRESH_VAL g_eHsiDmaThresVal;
extern u8 g_ucHsiDmaRxOnLevel;

extern DMAC 	oHsiDmaTx, oHsiDmaRx;

extern bool bIsBreakTest;
extern bool bBreakResult;
extern bool bHsiLoopback;

//////////
// Function Name : HSI_SetPort
// Function Description : This function sets GPIO for HSI
// Input : NONE
// Output : NONE
// Version : 
void HSI_SetPort(void)
{
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_0, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_1, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_2, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_3, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_4, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_5, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_6, 3);
	GPIO_SetFunctionEach(eGPIO_K, eGPIO_7, 3);

	// s/w work-around for GPIO bug
	InitUartPort(0, FALSE);

	return;
}

//////////
// Function Name : HSI_DisableTxDma
// Function Description : This function disables Tx DMA request
// Input : NONE
// Output : NONE
// Version : 
void HSI_DisableTxDma(void)
{
	u32 uTemp;
	
	uTemp = Inp32(rTX_INTMSK_REG);
	uTemp |= 1u<<31;
	Outp32(rTX_INTMSK_REG, uTemp);	

	return;
}

//////////
// Function Name : HSI_DisableRxDma
// Function Description : This function disables Tx DMA request
// Input : NONE
// Output : NONE
// Version : 
void HSI_DisableRxDma(void)
{
	u32 uTemp;
	
	uTemp = Inp32(rRX_INTMSK_REG);
	uTemp |= 1u<<31;
	Outp32(rRX_INTMSK_REG, uTemp);	

	return;
}

//////////
// Function Name : HSI_SetForTx
// Function Description : This function sets hsi sfr in order to tx
// Input : eFrMode, hsi operation mode(stream or frame)
//			eChidMode, ch id mode(burst or single)
//			eChidBits, ch id bit count(0~3)
//			eChidValue, ch id(0~7)
// Output : NONE
// Version : 
void HSI_SetForTx(HSI_OP_MODE eOpMode, HSI_FR_MODE eFrMode, HSI_CHID_MODE eChidMode, HSI_CHID_BITS eChidBits, HSI_CHID_VALUE eChidValue)
{
	u32 uTemp32;

	switch (eChidBits)
	{
		case HSI_CHID_0BIT:
			Assert(eChidValue==0);
			break;
		case HSI_CHID_1BIT:
			Assert(eChidValue<=1);
			break;
		case HSI_CHID_2BIT:
			Assert(eChidValue<=3);
			break;
		case HSI_CHID_3BIT:
			Assert(eChidValue<=7);
			break;
		default :
			Assert(eChidValue<=7);
			break;		
	}

	Outp32(rTX_SWRST_REG, 1);
	Outp32(rTX_SWRST_REG, 0);

	Outp32(rTX_CONFIG_REG, (1<<4));	//clear generated error

	Outp32(rTX_CONFIG_REG, (eChidBits<<2)|(eChidMode<<1)|(eFrMode<<0));

	Outp32(rTX_CHID_REG, eChidValue);

	uTemp32 = Inp32(rTX_CONFIG_REG);
	uTemp32 = uTemp32 & ~0xffffffe0 | ((TX_HOLD_TO_VAL<<24) | (TX_IDLE_TO_VAL<<16) | (TX_REQ_TO_VAL<<8) |
			(HSI_TIMER_ON<<7) | (HSI_TIMER_ON<<6) | (HSI_TIMER_ON<<5));
	Outp32(rTX_CONFIG_REG, uTemp32);

	Outp32(rTX_INTSRC_REG, 0x1f);	// clear interrupt pending

	if(eOpMode == HSI_INT_MODE)
	{
		Outp32(rTX_INTMSK_REG, 0x8000001f);	// mask tx interrupt
	}
	else if(eOpMode == HSI_DMA_MODE)
	{
		Outp32(rTX_INTMSK_REG, 0x0000001f);	// mask tx interrupt & enable dma_req
	}
	else
	{
		Assert(0);
	}

	return;
}


//////////
// Function Name : HSI_SetForRx
// Function Description : This function sets hsi sfr in order to rx
// Input : eFrMode, hsi operation mode(stream or frame)
//			eChidMode, ch id mode(burst or single)
//			eChidBits, ch id bit count(0~3)
// Output : NONE
// Version : 
void HSI_SetForRx(HSI_OP_MODE eOpMode, HSI_FR_MODE eFrMode, HSI_CHID_MODE eChidMode, HSI_CHID_BITS eChidBits)
{
	u32 uTemp32;

	Outp32(rRX_SWRST_REG, 1);
	Outp32(rRX_SWRST_REG, 0);

	Outp32(rRX_CONFIG0_REG, (1<<5)|(1<<4));	//clear break state & generated error

	Outp32(rRX_CONFIG0_REG, (eChidBits<<2)|(eChidMode<<1)|(eFrMode<<0));

	uTemp32 = Inp32(rRX_CONFIG0_REG);
	uTemp32 = uTemp32 & ~0x3fffff40 | ((g_eHsiDmaThresVal<<28)|(RX_STATE_TO_VAL<<16) | (RX_ACK_TO_VAL<<8) | (HSI_TIMER_ON<<6));	
	Outp32(rRX_CONFIG0_REG, uTemp32);

	if(eOpMode == HSI_INT_MODE)
		Outp32(rRX_CONFIG1_REG, (HSI_TIMER_ON<<27)|(RX_FIFO_TO_VAL1<<0));
	if(eOpMode == HSI_DMA_MODE)
		Outp32(rRX_CONFIG1_REG, (HSI_TIMER_ON<<27)|(RX_FIFO_TO_VAL2<<0));
	
	Outp32(rRX_INTSRC_REG, 0xff);	// clear interrupt pending

	if(eOpMode == HSI_INT_MODE)
	{
		Outp32(rRX_INTMSK_REG, 0x800000ff);	// mask rx interrupt
	}
	else if(eOpMode == HSI_DMA_MODE)
	{
		Outp32(rRX_INTMSK_REG, 0x000000ff);	// mask rx interrupt & enable dma_req
	}
	else
	{
		Assert(0);
	}

	

	return;
}

//////////
// Function Name : HSI_Tx_ISR
// Function Description : hsi tx isr
// Input : NONE
// Output : NONE
// Version : 
void __irq HSI_Tx_ISR(void)
{
	u32	uIntSrc, uTemp32;

	uIntSrc = Inp32(rTX_INTSRC_REG) & ~(Inp32(rTX_INTMSK_REG));		// w/o because of interrupt masking trouble

	if (uIntSrc & TXHOLD_TIMEOUT) {
		DbgHsi0("TxHOLD timeout.\n");
	}

	if (uIntSrc & TXIDLE_TIMEOUT) {
		DbgHsi0("TxIDLE timeout.\n");
	}
	
	if (uIntSrc & TXREQ_TIMEOUT) {
		DbgHsi0("TxREQ timeout.\n");
	}

	if (uIntSrc & TX_BREAKFRAME_END) {
		DbgHsi("Tx Break-Frame end.\n");
		if (bIsBreakTest == TRUE)
		{
			bHsiTxDone	=	1;	
			Outp32(rTX_INTSRC_REG, 0x1f);
			Outp32(rTX_INTMSK_REG, 0x1f);
		}
	}

	if (uIntSrc & TXFIFO_EMPTY) {
		DbgHsi("Tx FIFO Empty\n");	
		
		g_uHsiTxCount = g_uHsiPreTxCount;
		
		if(!(g_uHsiTxCount<HSI_TEST_COUNT))
		{
			bHsiTxDone	= 1;
			Outp32(rTX_INTSRC_REG, 0x1f);
			Outp32(rTX_INTMSK_REG, 0x1f);
		}
		else
		{		
			while(!(Inp32(rTX_STATUS_REG)&(1<<17)))
			{
				if (g_uHsiPreTxCount < HSI_TEST_COUNT)
				{
					Outp32(rTX_DATA_REG, g_uHsiTxData[g_uHsiPreTxCount++]);
				}
				else {
					break;
				}
			}
		}
	}

	uTemp32 = Inp32(rTX_CONFIG_REG);
	uTemp32 |= (1<<4);
	Outp32(rTX_CONFIG_REG, uTemp32);
	
	uTemp32 = Inp32(rTX_CONFIG_REG);
	uTemp32 &= ~(1<<4);
	Outp32(rTX_CONFIG_REG, uTemp32);

	Outp32(rTX_INTSRC_REG, uIntSrc);
	
	INTC_ClearVectAddr();

	return;
}

//////////
// Function Name : HSI_Rx_ISR
// Function Description : hsi rx isr
// Input : NONE
// Output : NONE
// Version : 
void __irq HSI_Rx_ISR(void)
{
	u32	uIntSrc, uTemp32;

	uIntSrc = Inp32(rRX_INTSRC_REG) & ~(Inp32(rRX_INTMSK_REG));		// w/o because of interrupt masking trouble

	if (uIntSrc & RX_BREAK_DONE)
	{
		DbgHsi("Rx Break-Frame done.\n");

		uTemp32 = Inp32(rRX_CONFIG0_REG);
		uTemp32 |= (1<<5);
		Outp32(rRX_CONFIG0_REG, uTemp32);
		
		uTemp32 = Inp32(rRX_CONFIG0_REG);
		uTemp32 &= ~(1<<5);
		Outp32(rRX_CONFIG0_REG, uTemp32);
		
		if(bIsBreakTest == TRUE)
		{
			bBreakResult = TRUE;
			bHsiRxDone = 1;
			Outp32(rRX_INTSRC_REG, 0xff);
			Outp32(rRX_INTMSK_REG, 0xff);
		}			
	}
	
	if (uIntSrc & RX_ADDED_CLOCK) {
		DbgHsi0("Rx Added Clock.\n");
	}

	if (uIntSrc & RX_MISSED_CLOCK) {
		DbgHsi0("Rx Missed Clock.\n");
	}
	
	if (uIntSrc & RXACK_TIMEOUT) {
		DbgHsi0("Rx ACK timeout.\n");
	}

	if (uIntSrc & RX_BREAKFRAME_ERR) {
		DbgHsi("Rx Break-Frame Error.\n");
	}

	if (uIntSrc & RX_DONE) {
		g_uHsiRxData[g_uHsiRxCount++] = Inp32(rRX_DATA_REG);
		DbgHsi0("Rx Done.\n");
		if(!(g_uHsiRxCount< HSI_TEST_COUNT))
		{
			bHsiRxDone = 1;	
			Outp32(rRX_INTSRC_REG, 0xff);
			Outp32(rRX_INTMSK_REG, 0xff);
		}
	}
	
	if ((uIntSrc & RXFIFO_TIMEOUT)||(uIntSrc & RXFIFO_FULL)) 
	{
		if (uIntSrc & RXFIFO_TIMEOUT)
		{
			DbgHsi("Rx FIFO timeout.\n");
		}
		else 
		{
			DbgHsi("Rx FIFO Full\n");
		}
		
		// Check empty and if not empty, read data
		while(!(Inp32(rRX_STATUS_REG) & (1<<16)))
		{
			g_uHsiRxData[g_uHsiRxCount++] = Inp32(rRX_DATA_REG);
		}
		if(!(g_uHsiRxCount< HSI_TEST_COUNT))
		{
			bHsiRxDone = 1;	
			Outp32(rRX_INTSRC_REG, 0xff);
			Outp32(rRX_INTMSK_REG, 0xff);
		}
		Outp32(rRX_INTSRC_REG, (RXFIFO_TIMEOUT | RXFIFO_FULL));
	}

	uTemp32 = Inp32(rRX_CONFIG0_REG);
	uTemp32 |= (1<<4);
	Outp32(rRX_CONFIG0_REG, uTemp32);
	
	uTemp32 = Inp32(rRX_CONFIG0_REG);
	uTemp32 &= ~(1<<4);
	Outp32(rRX_CONFIG0_REG, uTemp32);

	Outp32(rRX_INTSRC_REG, uIntSrc);
	
	INTC_ClearVectAddr();

	return;
}

//////////
// Function Name : HSI_SetDmaForTx
// Function Description : this function sets DMA for tx
// Input : NONE
// Output : NONE
// Version : 
void HSI_SetDmaForTx(u32 uCount)
{	
	if (uCount>0)
		g_uHsiDmaTxCnt = uCount;
	else
		Assert(0);
	
	// Channel, LLI_Address, SrcAddr, Src Type, DstAddr, Dst Type, Transfer Width, Transfer Size, OpMode(DEMAND), Src Req, Dst Req, Burst
	// Channel Set-up			[source increment, dest fixed]
	DMACH_Setup(DMA_A, 0x0, (u32)&g_uHsiTxData[g_uHsiTxCount] , 0, (u32)rTX_DATA_REG, 1, WORD, g_uHsiDmaTxCnt, DEMAND, MEM, DMA0_HSI_TX, SINGLE, &oHsiDmaTx);

	return;
}

//////////
// Function Name : HSI_SetDmaForRx
// Function Description : this function sets DMA for rx
// Input : NONE
// Output : NONE
// Version : 
void HSI_SetDmaForRx(u32 uCount)
{
	if(uCount<=g_ucHsiDmaRxOnLevel)
	{
		return;
	}	
	else
	{
		g_uHsiDmaRxCnt = uCount-g_ucHsiDmaRxOnLevel-1;
	}
	
	// Channel, LLI_Address, SrcAddr, Src Type, DstAddr, Dst Type, Transfer Width, Transfer Size, OpMode(DEMAND), Src Req, Dst Req, Burst
	// Channel Set-up			[source increment, dest fixed]
	DMACH_Setup(DMA_B, 0x0, (u32)rRX_DATA_REG , 1, (u32)&g_uHsiRxData[g_uHsiRxCount], 0, WORD, g_uHsiDmaRxCnt, DEMAND, DMA0_HSI_RX, MEM, SINGLE, &oHsiDmaRx);

	return;
}

//////////
// Function Name : HSI_Dma_ISR
// Function Description : hsi dma isr
// Input : NONE
// Output : NONE
// Version : 
void __irq HSI_Dma_ISR(void)
{
	u32 uStatus;
	
	INTC_Disable(NUM_DMA0);

	uStatus = DMAC_IntStatus(&oHsiDmaTx);
	
	if (uStatus&DMA_A)    // Tx
	{	
		DbgHsi("hsi tx dma\n");
		
		DMACH_Stop(&oHsiDmaTx);
		
		g_uHsiTxCount += g_uHsiDmaTxCnt;
		
		if (g_uHsiTxCount==HSI_TEST_COUNT)
		{
			bHsiTxDone = true; 
		}		
	}

	uStatus = DMAC_IntStatus(&oHsiDmaRx);
	
	if (uStatus&DMA_B)
	{
		DbgHsi("hsi rx dma\n");
		
		DMACH_Stop(&oHsiDmaRx);
		
		g_uHsiRxCount += g_uHsiDmaRxCnt;	
	}
	
	// Interrupt Clear
	DMACH_ClearIntPending(&oHsiDmaTx);
	DMACH_ClearErrIntPending(&oHsiDmaTx);
	DMACH_ClearIntPending(&oHsiDmaRx);
	DMACH_ClearErrIntPending(&oHsiDmaRx);
	
	INTC_Enable(NUM_DMA0);

	INTC_ClearVectAddr();
	
	return;
}

//////////
// Function Name : HSI_SetBreakFrameTx
// Function Description : this function sets tx_break_frame
// Input : NONE
// Output : NONE
// Version : 
void HSI_SetBreakFrameTx(void)
{
	u32 uTemp32;

	uTemp32 = Inp32(rTX_CHID_REG);
	uTemp32 |= (1u<<31)|(1<<30);	//break frame transfer
	Outp32(rTX_CHID_REG, uTemp32);

	uTemp32 = Inp32(rTX_INTMSK_REG);
	uTemp32 &= ~(TX_BREAKFRAME_END);	// unmask tx breakframe_end interrupt
	Outp32(rTX_CHID_REG, uTemp32);

	return;
}

//////////
// Function Name : HSI_ClearBreakFrameTx
// Function Description : this function clears tx_break_frame
// Input : NONE
// Output : NONE
// Version : 
void HSI_ClearBreakFrameTx(void)
{
	u32 uTemp32;

	uTemp32 = Inp32(rTX_CHID_REG);
	uTemp32 |= (1<<29);	// clear break frame
	Outp32(rTX_CHID_REG, uTemp32);

	return;
}

//////////
// Function Name : HSI_UnmaskTxInt
// Function Description : this function unmasks specific tx interrupts
// Input : NONE
// Output : NONE
// Version : 
void HSI_UnmaskTxInt(u32 uInt)
{
	u32 uTemp32;

	uTemp32 = Inp32(rTX_INTMSK_REG);
	uTemp32 = (uTemp32 | 0x1f) & ~uInt;
	Outp32(rTX_INTMSK_REG, uTemp32);

	return;
}

//////////
// Function Name : HSI_UnmaskRxInt
// Function Description : this function unmasks specific rx interrupts
// Input : NONE
// Output : NONE
// Version : 
void HSI_UnmaskRxInt(u32 uInt)
{
	u32 uTemp32;

	uTemp32 = Inp32(rRX_INTMSK_REG);
	uTemp32 = (uTemp32 | 0xff) & ~uInt;
	Outp32(rRX_INTMSK_REG, uTemp32);

	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线影院| 亚洲综合色区另类av| 国产一区二区三区最好精华液| 91精品国产综合久久精品性色| 日韩在线a电影| 欧美一区二区三区人| 男男视频亚洲欧美| 欧美本精品男人aⅴ天堂| 韩国精品久久久| 日本一二三不卡| 成人性视频网站| 亚洲最大的成人av| 日韩一区二区三区电影| 精品系列免费在线观看| 国产人妖乱国产精品人妖| 99re成人精品视频| 午夜视频一区在线观看| 欧美第一区第二区| 成人精品视频一区二区三区| 亚洲精品高清视频在线观看| 欧美日韩精品一区二区| 激情综合网最新| 成人免费一区二区三区视频| 欧美日韩一区二区三区在线看| 美女视频黄免费的久久 | 韩国v欧美v亚洲v日本v| 中文乱码免费一区二区| 欧美日韩国产一二三| 国产乱妇无码大片在线观看| 亚洲男人的天堂在线aⅴ视频| 制服丝袜亚洲精品中文字幕| 国产精品亚洲综合一区在线观看| 一区二区三区日韩在线观看| 欧美成人午夜电影| 91成人在线观看喷潮| 国产乱淫av一区二区三区| 日韩精品成人一区二区在线| 国产欧美日本一区二区三区| 欧美日韩一二三| 成人激情av网| 另类小说综合欧美亚洲| 亚洲欧美日韩一区二区| 精品国产凹凸成av人网站| 一本久久a久久免费精品不卡| 久久国产夜色精品鲁鲁99| 亚洲欧美乱综合| 精品久久五月天| 欧美日韩国产大片| 97精品视频在线观看自产线路二| 久久国产精品72免费观看| 一区二区三区美女视频| 国产欧美久久久精品影院| 日韩一级免费一区| 欧美视频在线观看一区二区| 99在线热播精品免费| 国产揄拍国内精品对白| 日韩精品久久久久久| 一区二区三区精品视频| 国产精品乱码人人做人人爱 | 91丨国产丨九色丨pron| 国产乱人伦偷精品视频免下载| 日本一区中文字幕 | 51精品秘密在线观看| 97久久超碰国产精品电影| 国产99久久精品| 国产精品一级黄| 韩国毛片一区二区三区| 麻豆精品在线视频| 日韩av电影天堂| 亚洲影院免费观看| 亚洲一区二区三区四区的| 亚洲色图在线看| 专区另类欧美日韩| 亚洲丝袜美腿综合| 中文字幕视频一区| 自拍偷拍亚洲激情| 亚洲人精品午夜| 中文字幕一区二区日韩精品绯色 | 一区二区中文字幕在线| 国产日产欧产精品推荐色 | 国产精品久久久久久久久免费丝袜| 精品卡一卡二卡三卡四在线| 91麻豆精品国产91久久久| 欧美精品一二三四| 制服丝袜中文字幕亚洲| 日韩欧美电影一二三| 精品国产91九色蝌蚪| 久久久久一区二区三区四区| 久久女同性恋中文字幕| 中文字幕的久久| 国产精品久久久久久久久果冻传媒| 亚洲欧美在线观看| 亚洲综合色丁香婷婷六月图片| 亚洲国产一区二区在线播放| 偷拍一区二区三区四区| 麻豆国产精品一区二区三区| 韩国理伦片一区二区三区在线播放 | 国产精品蜜臀在线观看| 中文字幕一区二区三区蜜月| 亚洲国产精品自拍| 日韩电影在线免费观看| 久久99深爱久久99精品| 国产aⅴ综合色| 在线精品视频一区二区| 91精品综合久久久久久| 久久婷婷国产综合国色天香 | 91色在线porny| 欧美精品一二三四| 国产色产综合色产在线视频| 中文字幕在线观看不卡| 亚洲成a人片在线不卡一二三区| 捆绑调教美女网站视频一区| 国产91丝袜在线18| 欧美日韩三级一区| 一区二区三区久久| 蜜臀av性久久久久av蜜臀妖精| 国产精品综合视频| 色综合久久久久久久久久久| 日韩一区二区免费电影| 中文字幕在线观看一区| 蜜桃视频免费观看一区| 不卡电影免费在线播放一区| 欧美久久久一区| 中文字幕在线不卡一区| 另类小说视频一区二区| 91福利视频久久久久| 久久一区二区三区四区| 亚洲不卡一区二区三区| 成人午夜免费av| 欧美一区二区三区四区五区| 日韩码欧中文字| 国产一区二区福利| 欧美群妇大交群中文字幕| 久久精品夜色噜噜亚洲aⅴ| 亚洲一区二区三区在线播放| 国产麻豆视频精品| 69堂成人精品免费视频| 亚洲精品国产高清久久伦理二区| 国产精品一区在线观看乱码| 欧美日韩一区小说| 亚洲免费高清视频在线| 国产精品一区二区三区网站| 欧美猛男男办公室激情| 亚洲欧美区自拍先锋| 成人综合婷婷国产精品久久| 欧美一区二区三区四区在线观看| 一区二区三区欧美日| 成人综合婷婷国产精品久久蜜臀| 2023国产精品| 蜜桃精品视频在线| 91精品国产综合久久蜜臀| 亚洲一区自拍偷拍| 色综合久久中文字幕综合网| 亚洲国产激情av| 国产精品亚洲成人| 久久你懂得1024| 国产精品资源站在线| 日韩精品最新网址| 免费在线观看成人| 欧美日韩精品欧美日韩精品一 | 日韩av电影免费观看高清完整版 | 欧美亚一区二区| 亚洲精品第1页| 在线影院国内精品| 亚洲欧美aⅴ...| 91天堂素人约啪| 日韩毛片精品高清免费| 97久久久精品综合88久久| 日韩毛片在线免费观看| 91最新地址在线播放| 中文字幕一区二区三区乱码在线 | 一区二区三区免费在线观看| 99久久国产综合精品麻豆| 国产精品久久久久影院亚瑟 | 欧美色图在线观看| 亚洲国产精品自拍| 欧美精品123区| 美国十次了思思久久精品导航| 欧美一级国产精品| 久久精品99国产国产精| 精品国产乱码久久久久久老虎| 九九久久精品视频| 国产亚洲欧美在线| 99久久免费精品| 夜夜精品视频一区二区| 在线播放91灌醉迷j高跟美女 | 国产成人欧美日韩在线电影| 国产亚洲1区2区3区| 成人黄色小视频在线观看| 亚洲欧美另类久久久精品| 欧美系列日韩一区| 免费在线观看视频一区| 久久久久久久久久美女| 97精品超碰一区二区三区| 亚洲图片欧美综合| 久久这里只有精品首页| jlzzjlzz亚洲日本少妇| 亚洲二区视频在线| 久久综合丝袜日本网| www.av精品|