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

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

?? hwctxt.cpp

?? 三星2440 cpu WINCE 5.00板級支持包
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
BOOL HardwareContext::MapDMABuffers()
{
    PBYTE pVirtDMABufferAddr = NULL;
    DMA_ADAPTER_OBJECT Adapter;


    memset(&Adapter, 0, sizeof(DMA_ADAPTER_OBJECT));
    Adapter.InterfaceType = Internal;
    Adapter.ObjectSize = sizeof(DMA_ADAPTER_OBJECT);

    // Allocate a block of virtual memory (physically contiguous) for the DMA buffers.
    //
    pVirtDMABufferAddr = (PBYTE)HalAllocateCommonBuffer(&Adapter, (AUDIO_DMA_PAGE_SIZE * 4), &g_PhysDMABufferAddr, FALSE);
    if (pVirtDMABufferAddr == NULL)
    {
        RETAILMSG(TRUE, (TEXT("WAVEDEV.DLL:HardwareContext::MapDMABuffers() - Failed to allocate DMA buffer.\r\n")));
        return(FALSE);
    }

    // Setup the DMA page pointers.
    // NOTE: Currently, input and output each have two DMA pages: these pages are used in a round-robin
    // fashion so that the OS can read/write one buffer while the audio codec chip read/writes the other buffer.
    //
    m_Output_pbDMA_PAGES[0] = pVirtDMABufferAddr;
    m_Output_pbDMA_PAGES[1] = pVirtDMABufferAddr + AUDIO_DMA_PAGE_SIZE;
    m_Input_pbDMA_PAGES[0]  = pVirtDMABufferAddr + (2 * AUDIO_DMA_PAGE_SIZE);
    m_Input_pbDMA_PAGES[1]  = pVirtDMABufferAddr + (3 * AUDIO_DMA_PAGE_SIZE);

    return(TRUE);
	
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		UnmapDMABuffers()

Description:	Unmaps the DMA buffers used for audio input/output
				on the I2S bus.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::UnmapDMABuffers()
{
	if(m_Output_pbDMA_PAGES[0])
	{
		VirtualFree((PVOID)m_Output_pbDMA_PAGES[0], 0, MEM_RELEASE);
	}

	return TRUE;
}

BOOL HardwareContext::Codec_channel()
{

    UCHAR status = UDA1341_STATUS_B | UDA1341_STATUS_IGS; //enable 6dB mic boost
    // which parts to turn on?
    if (m_InputDMARunning) {
        status |= UDA1341_STATUS_PWR_ADC; // turn on ADC
    }
    if (m_OutputDMARunning) {
        status |= UDA1341_STATUS_PWR_DAC; // turn on DAC
    }

    //****** Port B Initialize *****
    g_pIOPregs->GPBDAT |= L3M|L3C;	//start condition : L3M=H, L3C=H
    g_pIOPregs->GPBUP  |= 0x1c;	//pull-up disable
    g_pIOPregs->GPBCON = ((g_pIOPregs->GPBCON & 0x3ffc0f) | 0x000150);
	

	WriteL3Addr(UDA1341_ADDR_STATUS);
    WriteL3Data(status, 0);

    return(TRUE);
}

MMRESULT HardwareContext::SetOutputGain (DWORD dwGain)
{
    m_dwOutputGain = dwGain & 0xffff; // save off so we can return this from GetGain - but only MONO
    // convert 16-bit gain to 5-bit attenuation
    UCHAR ucGain;
    if (m_dwOutputGain == 0) {
        ucGain = 0x3F; // mute: set maximum attenuation
    }
    else {
        ucGain = (UCHAR) ((0xffff - m_dwOutputGain) >> 11); // codec supports 64dB attenuation, we'll only use 32
    }
    ASSERT((ucGain & 0xC0) == 0); // bits 6,7 clear indicate DATA0 in Volume mode.

    WriteL3Addr(UDA1341_ADDR_DATA0);
    WriteL3Data(ucGain, 0); 

    return MMSYSERR_NOERROR;
}

MMRESULT HardwareContext::SetOutputMute (BOOL fMute)
{
    m_fOutputMute = fMute;

    WriteL3Addr(UDA1341_ADDR_DATA0);
    WriteL3Data(fMute ? 0x84 : 0x80, 0); // DATA0: 0x80 + fMute << 2

    return MMSYSERR_NOERROR;
}

BOOL HardwareContext::GetOutputMute (void)
{
    return m_fOutputMute;
}

DWORD HardwareContext::GetOutputGain (void)
{
    return m_dwOutputGain;
}

BOOL HardwareContext::GetInputMute (void)
{
    return m_fInputMute;
}

MMRESULT HardwareContext::SetInputMute (BOOL fMute)
{
    m_fInputMute = fMute;
    return m_InputDeviceContext.SetGain(fMute ? 0: m_dwInputGain);
}

DWORD HardwareContext::GetInputGain (void)
{
    return m_dwInputGain;
}

MMRESULT HardwareContext::SetInputGain (DWORD dwGain)
{
    m_dwInputGain = dwGain;
    if (! m_fInputMute) {
        m_InputDeviceContext.SetGain(dwGain);
    }
    return MMSYSERR_NOERROR;
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		InitCodec()

Description:	Initializes the audio codec chip.

Notes:			The audio codec chip is intialized for output mode
				but powered down.  To conserve battery life, the chip
				is only powered up when the user starts playing a 
				file.

				Specifically, the powerup/powerdown logic is done 
				in the AudioMute() function.  If either of the 
				audio channels are unmuted, then the chip is powered
				up; otherwise the chip is powered own.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::InitCodec()
{
	
	DEBUGMSG(ZONE_FUNCTION, (TEXT("+++InitCodec\n")));
	
    //****** Port B Initialize *****
    g_pIOPregs->GPBDAT |= L3M|L3C;	//start condition : L3M=H, L3C=H
    g_pIOPregs->GPBUP  |= 0x1c;	//pull-up disable
    g_pIOPregs->GPBCON = ((g_pIOPregs->GPBCON & 0x3ffc0f) | 0x000150);
	

    // Reset codec internal registers by toggling the status register reset bit
    WriteL3Addr(UDA1341_ADDR_STATUS);
    WriteL3Data(UDA1341_STATUS_RESET | UDA1341_STATUS_CLK384,0);

    WriteL3Addr(UDA1341_ADDR_STATUS);
    WriteL3Data(UDA1341_STATUS_CLK384,0);

    // set default gain, power state
    WriteL3Addr(UDA1341_ADDR_STATUS);
    WriteL3Data(UDA1341_STATUS_B | UDA1341_STATUS_IGS | UDA1341_STATUS_PWR_DAC,0);

    // extended address:
	WriteL3Addr(UDA1341_ADDR_DATA0);
	WriteL3Data(0xC2,0);       //11000,010  : DATA0, Extended addr(010) 
	WriteL3Data(0x4D,0);       //010,011,11 : DATA0, MS=+9dB, MixerMode=both(1) 

    // enable AGC
	WriteL3Addr(UDA1341_ADDR_DATA0);
	WriteL3Data(0xC4,0);       //11000,100  : DATA0, Extended addr(100) 
	WriteL3Data(0x90,0);       //100,100,00 : DATA0, AGC=On, IG[0,1]=0

	return(TRUE);
}



/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		InitOutputDMA()

Description:	Initializes the DMA channel for output.

Notes:			DMA Channel 2 is used for transmitting output sound
				data from system memory to the I2S controller.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::InitOutputDMA()
{
	
	//----- 1. Initialize the DMA channel for output mode and use the first output DMA buffer -----
    if (!g_PhysDMABufferAddr.LowPart)
    {
        DEBUGMSG(TRUE, (TEXT("ERROR:HardwareContext::InitOutputDMA: Invalid DMA buffer physical address.\r\n")));
        return(FALSE);
    }
    g_pDMAregs->DISRC2	= (int)(g_PhysDMABufferAddr.LowPart); 
    g_pDMAregs->DISRCC2 &= ~(SOURCE_PERIPHERAL_BUS | FIXED_SOURCE_ADDRESS);				// Source is system bus, increment addr

    //----- 2. Initialize the DMA channel to send data over the I2S bus -----
    g_pDMAregs->DIDST2	= (int)(S3C2440X_BASE_REG_PA_IISBUS+0x10); 
    g_pDMAregs->DIDSTC2 |= (DESTINATION_PERIPHERAL_BUS | FIXED_DESTINATION_ADDRESS);	// Dest is  periperal bus, fixed addr

	//----- 3. Configure the DMA channel's transfer characteristics: handshake, sync PCLK, interrupt, -----
	//		   single tx, single service, I2SSDO, I2S request, no auto-reload, half-word, tx count
	g_pDMAregs->DCON2	= (  HANDSHAKE_MODE | GENERATE_INTERRUPT | I2SSDO_DMA2 | DMA_TRIGGERED_BY_HARDWARE 
                           | TRANSFER_HALF_WORD | (AUDIO_DMA_PAGE_SIZE / 2) );
	
	//----- 4. Reset the playback pointers -----
	AUDIO_RESET_PLAYBACK_POINTER();
	
	DEBUGMSG(ZONE_FUNCTION,(TEXT("---InitOutputDMA\n")));

	return TRUE;
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		StartOutputDMA()

Description:	Starts outputting the sound data to the audio codec
				chip via DMA.

Notes:			Currently, both playback and record share the same
				DMA channel.  Consequently, we can only start this
				operation if the input channel isn't using DMA.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::StartOutputDMA()
{
	DEBUGMSG(ZONE_FUNCTION,(TEXT("+++StartOutputDMA\n")));
	
    if(!m_OutputDMARunning)
    {
        //----- 1. Initialize our buffer counters -----
        m_OutputDMARunning=TRUE;
        m_OutBytes[OUT_BUFFER_A]=m_OutBytes[OUT_BUFFER_B]=0;

        //----- 2. Prime the output buffer with sound data -----
		m_OutputDMAStatus = (DMA_DONEA | DMA_DONEB) & ~DMA_BIU;	
		ULONG OutputTransferred = TransferOutputBuffers(m_OutputDMAStatus);
        
		//----- 3. If we did transfer any data to the DMA buffers, go ahead and enable DMA -----
		if(OutputTransferred)
        {
			//----- 4. Configure the DMA channel for playback -----
			if(!InitOutputDMA())
			{
				DEBUGMSG(ZONE_ERROR, (TEXT("HardwareContext::StartOutputDMA() - Unable to initialize output DMA channel!\r\n")));
				goto START_ERROR;
			}
			g_pIISregs->IISCON |= TRANSMIT_DMA_REQUEST_ENABLE;
			g_pIISregs->IISCON &= ~TRANSMIT_IDLE_CMD;
			g_pIISregs->IISFCON |= (  TRANSMIT_FIFO_ACCESS_DMA | TRANSMIT_FIFO_ENABLE  );
			g_pIISregs->IISMOD  |= IIS_TRANSMIT_MODE;
			//----- 5. Make sure the audio isn't muted -----
			AudioMute(DMA_CH_OUT, FALSE);					

			//----- 6. Start the DMA controller -----
			AUDIO_RESET_PLAYBACK_POINTER();
			SELECT_AUDIO_DMA_OUTPUT_BUFFER_A();
			Codec_channel();								// Turn ON output channel
			// charlie, start A buffer
			AUDIO_OUT_DMA_ENABLE();
	        // wait for DMA to start.
	        while((g_pDMAregs->DSTAT2&0xfffff)==0);        
	        // change the buffer pointer
	        SELECT_AUDIO_DMA_OUTPUT_BUFFER_B();
	        // Set DMA for B Buffer
        }
        else    // We didn't transfer any data, so DMA wasn't enabled
        {
            m_OutputDMARunning=FALSE;
        }
    }
    
    DEBUGMSG(ZONE_FUNCTION,(TEXT("---StartOutputDMA\n")));

	return TRUE;

START_ERROR:
	return FALSE;
}

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		StopOutputDMA()

Description:	Stops any DMA activity on the output channel.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
void HardwareContext::StopOutputDMA()
{
	//----- 1. If the output DMA is running, stop it -----
    if (m_OutputDMARunning)
	{
		m_OutputDMAStatus = DMA_CLEAR;				
		AUDIO_OUT_DMA_DISABLE();
		AUDIO_OUT_CLEAR_INTERRUPTS();
		g_pIISregs->IISCON &= ~TRANSMIT_DMA_REQUEST_ENABLE;
		g_pIISregs->IISCON |= TRANSMIT_IDLE_CMD;
		g_pIISregs->IISFCON &= ~(  TRANSMIT_FIFO_ACCESS_DMA | TRANSMIT_FIFO_ENABLE  );
		g_pIISregs->IISMOD  &= ~IIS_TRANSMIT_MODE;
		AudioMute(DMA_CH_OUT, TRUE);		
    }

	m_OutputDMARunning = FALSE;
	Codec_channel();
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		InitInputDMA()

Description:	Initializes the DMA channel for input.

Notes:			***** NOT IMPLEMENTED *****

				The following routine is not implemented due to a
				hardware bug in the revision of the Samsung SC2440
				CPU this driver was developed on.  See the header
				at the top of this file for details.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::InitInputDMA()
{

	DEBUGMSG(ZONE_FUNCTION,(TEXT("+++InitInputDMA\n")));

    if (!g_PhysDMABufferAddr.LowPart)
    {
        DEBUGMSG(TRUE, (TEXT("ERROR:HardwareContext::InitInputDMA: Invalid DMA buffer physical address.\r\n")));
        return(FALSE);
    }

	//============================ Configure DMA Channel 1 ===========================
	//------ On platforms with the revsion of the Samsung SC2440 CPU with the IIS SLAVE bug fix, this -----
	//		 code can be used to configure DMA channel 1 for input.

	//----- 1. Initialize the DMA channel for input mode and use the first input DMA buffer -----
	g_pDMAregs->DISRC1	= (int)(S3C2440X_BASE_REG_PA_IISBUS+0x10);
	g_pDMAregs->DISRCC1 = (SOURCE_PERIPHERAL_BUS | FIXED_SOURCE_ADDRESS);				// Source is periperal bus, fixed addr
    
    //----- 2. Initialize the DMA channel to receive data over the I2S bus -----
    g_pDMAregs->DIDST1	= (int)(g_PhysDMABufferAddr.LowPart); 
    g_pDMAregs->DIDSTC1 &= ~(DESTINATION_PERIPHERAL_BUS | FIXED_DESTINATION_ADDRESS);	// Destination is system bus, increment addr

	//----- 3. Configure the DMA channel's transfer characteristics: handshake, sync PCLK, interrupt, -----
	//		   single tx, single service, I2SSDI, I2S request, no auto-reload, half-word, tx count
	g_pDMAregs->DCON1	= (  HANDSHAKE_MODE | GENERATE_INTERRUPT | I2SSDI_DMA1 | DMA_TRIGGERED_BY_HARDWARE 
                           | TRANSFER_HALF_WORD | (AUDIO_DMA_PAGE_SIZE / 2)
                            );
	return(TRUE);
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		StartInputDMA()

Description:	Starts inputting the recorded sound data from the 
				audio codec chip via DMA.

Notes:			***** NOT IMPLEMENTED *****

				The following routine is not implemented due to a
				hardware bug in the revision of the Samsung SC2440
				CPU this driver was developed on.  See the header
				at the top of this file for details.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::StartInputDMA()
{
	
	//------ On platforms with the revsion of the Samsung SC2440 CPU with the IIS SLAVE bug fix, this -----
	//		 code can be used to configure DMA channel 1 for input.

	DEBUGMSG(ZONE_FUNCTION,(TEXT("+++StartInputDMA\n")));

	if(!m_InputDMARunning)
    {
        //----- 1. Initialize our buffer counters -----
        m_InputDMARunning=TRUE;
		Codec_channel();        // Turn On Input channel
        m_InBytes[IN_BUFFER_A]=m_InBytes[IN_BUFFER_B]=0;

        //----- 2. Prime the output buffer with sound data -----
		m_InputDMAStatus = (DMA_DONEA | DMA_DONEB) & ~DMA_BIU;	

		//----- 3. Configure the DMA channel for record -----
		if(!InitInputDMA())
		{
			DEBUGMSG(ZONE_ERROR, (TEXT("HardwareContext::StartInputDMA() - Unable to initialize input DMA channel!\r\n")));
			goto START_ERROR;
		}
		g_pIISregs->IISFCON |= (RECEIVE_FIFO_ACCESS_DMA  | RECEIVE_FIFO_ENABLE);
		g_pIISregs->IISCON  |= RECEIVE_DMA_REQUEST_ENABLE;	 
		g_pIISregs->IISMOD  |= IIS_RECEIVE_MODE;
	
		//----- 4. Make sure the audio isn't muted -----
		AudioMute(DMA_CH_MIC, FALSE);					

		//----- 5. Start the input DMA -----
		AUDIO_RESET_RECORD_POINTER();
		SELECT_AUDIO_DMA_INPUT_BUFFER_A();

		Codec_channel();        // Turn On Input channel
		g_pDMAregs->DMASKTRIG1 = ENABLE_DMA_CHANNEL;		
		
        // wait for DMA to start.
        while((g_pDMAregs->DSTAT1&0xfffff)==0);        
        // change the buffer pointer
        SELECT_AUDIO_DMA_INPUT_BUFFER_B();
				
    }
    DEBUGMSG(ZONE_FUNCTION,(TEXT("---StartInputDMA\n")));
	return(TRUE);

START_ERROR:
	return(FALSE);
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		StopInputDMA()

Description:	Stops any DMA activity on the input channel.

Notes:			***** NOT IMPLEMENTED *****

				The following routine is not implemented due to a
				hardware bug in the revision of the Samsung SC2440
				CPU this driver was developed on.  See the header
				at the top of this file for details.

Returns:		Boolean indicating success
-------------------------------------------------------------------*/
void HardwareContext::StopInputDMA()
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日摸夜夜添夜夜添国产精品 | 99国产精品久久久| 久久综合九色综合欧美就去吻| 日本视频中文字幕一区二区三区| 制服.丝袜.亚洲.中文.综合| 日本色综合中文字幕| 日韩精品在线一区| 懂色av一区二区三区免费观看| 国产精品久久久久久久第一福利 | 成人动漫一区二区| 亚洲视频在线观看一区| 91黄色免费看| 日韩精品1区2区3区| 欧美精品一区二区三区蜜桃| 成人av电影免费在线播放| 亚洲靠逼com| 欧美一区二区精品在线| 国产精品亚洲第一| 国产精品欧美一级免费| 欧美在线综合视频| 免费人成在线不卡| 中文文精品字幕一区二区| 一本色道**综合亚洲精品蜜桃冫| 天堂在线一区二区| 国产女人aaa级久久久级| 在线观看不卡一区| 国产在线麻豆精品观看| 一区二区三区欧美久久| 日韩欧美成人午夜| 91蜜桃在线观看| 久久av老司机精品网站导航| 一色桃子久久精品亚洲| 欧美一区二区久久| 99久久99久久精品免费观看| 免费日韩伦理电影| 亚洲免费观看高清完整版在线观看| 欧美一级国产精品| 一本大道久久a久久精二百| 久久国产精品一区二区| 亚洲免费在线观看| 久久久91精品国产一区二区精品 | 97se狠狠狠综合亚洲狠狠| 偷拍一区二区三区| 一区在线播放视频| 久久久久久久久久久久久夜| 欧美日韩国产综合一区二区| 成人午夜视频福利| 国产一区二区三区电影在线观看| 亚洲成人1区2区| 亚洲品质自拍视频网站| 国产日产欧美精品一区二区三区| 91精品久久久久久蜜臀| 在线一区二区三区四区五区| 粉嫩绯色av一区二区在线观看 | 国产福利91精品一区| 亚洲国产成人高清精品| 亚洲欧洲综合另类| 国产亚洲精品久| 日韩免费一区二区| 91精选在线观看| 在线观看欧美精品| 在线观看日韩电影| 91麻豆免费看片| 99国产麻豆精品| 成人福利视频网站| 不卡的av网站| 国产麻豆精品久久一二三| 美女脱光内衣内裤视频久久网站 | 成人h动漫精品| 国产精品综合网| 精品一区二区三区在线观看| 日韩国产精品久久久| 日韩成人精品视频| 日本亚洲电影天堂| 日韩av电影一区| 天天综合网天天综合色| 午夜国产精品影院在线观看| 亚洲国产一区二区a毛片| 一区二区激情视频| 亚洲国产精品久久久男人的天堂| 亚洲一区二区在线视频| 亚洲国产精品一区二区久久恐怖片| 亚洲综合一区二区精品导航| 亚洲综合在线观看视频| 亚洲国产精品一区二区www在线| 亚洲午夜免费电影| 午夜成人在线视频| 麻豆精品新av中文字幕| 久久99精品视频| 国产一区二区三区| 成人国产在线观看| 91麻豆精东视频| 欧美日韩激情一区二区三区| 日韩午夜在线影院| 久久久久久久免费视频了| 国产精品你懂的在线欣赏| 中文字幕一区二区三区在线不卡 | 婷婷亚洲久悠悠色悠在线播放| 亚洲一级二级三级| 美女国产一区二区| 国产aⅴ精品一区二区三区色成熟| 成人在线一区二区三区| 91黄色在线观看| 欧美va日韩va| 国产精品美女久久福利网站| 亚洲国产毛片aaaaa无费看| 日本aⅴ免费视频一区二区三区| 激情六月婷婷久久| 91香蕉视频在线| 欧美裸体bbwbbwbbw| 精品粉嫩aⅴ一区二区三区四区| 国产欧美一区二区在线| 亚洲黄色av一区| 奇米影视一区二区三区小说| 国产精品自拍在线| 日本丶国产丶欧美色综合| 日韩精品一区二区三区视频在线观看 | 欧美激情中文不卡| 亚洲精品中文字幕乱码三区| 亚洲不卡在线观看| 国产成人在线观看免费网站| 欧美调教femdomvk| 中文字幕不卡一区| 日韩成人伦理电影在线观看| 成人免费观看视频| 欧美一级欧美三级在线观看| 亚洲欧洲国产日本综合| 久久不见久久见免费视频1| 色偷偷一区二区三区| 精品国产成人在线影院| 一区二区成人在线观看| 丁香婷婷综合激情五月色| 欧美图片一区二区三区| 国产精品丝袜一区| 美女脱光内衣内裤视频久久网站 | 91精品国产综合久久久久久久久久| 日本一区二区三区四区在线视频| 亚洲午夜电影在线观看| 成人免费观看视频| 精品剧情在线观看| 日韩国产高清在线| 日本韩国一区二区三区| 久久精品免视看| 秋霞电影网一区二区| 色呦呦网站一区| 欧美极品xxx| 国产精品一区二区不卡| 日韩写真欧美这视频| 亚洲成a人片在线观看中文| 99久免费精品视频在线观看| 久久只精品国产| 精品一区二区三区在线视频| 91精品国产麻豆| 亚洲综合免费观看高清在线观看| 91在线观看免费视频| 欧美激情一区二区三区蜜桃视频| 免费成人小视频| 88在线观看91蜜桃国自产| 亚洲一区在线观看视频| 色婷婷av一区二区三区大白胸 | 成人欧美一区二区三区视频网页| 国产精品主播直播| 精品国产网站在线观看| 免费观看久久久4p| 日韩一区二区不卡| 蜜桃精品视频在线观看| 91麻豆精品国产91久久久久久久久| 婷婷一区二区三区| 91精品久久久久久久91蜜桃| 蜜桃精品视频在线| 精品久久久三级丝袜| 国内久久精品视频| 国产色一区二区| 成人国产精品免费观看| 国产精品天干天干在线综合| 99久久久久久| 一个色在线综合| 欧美日韩高清在线播放| 日本不卡一二三| 欧美精品一区二区三区四区| 国产精品白丝jk白祙喷水网站| 久久久久免费观看| 99久久精品一区| 亚洲国产成人av网| 制服丝袜日韩国产| 国产一区二区免费在线| 国产精品久久久久影院老司| 欧美综合一区二区三区| 奇米色一区二区| 欧美激情在线看| 欧美在线看片a免费观看| 污片在线观看一区二区| 久久久一区二区三区捆绑**| 成人激情电影免费在线观看| 亚洲国产精品影院| 精品91自产拍在线观看一区| 成人免费视频app| 午夜久久久久久久久| 26uuu成人网一区二区三区| av中文字幕在线不卡|