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

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

?? hwctxt.cpp

?? s3c2440 WINCE 5.00 官方bsp
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
{
    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(0xef,0);       //111,011,11 : DATA0, MS=+9dB, MixerMode=both(1) 

    // disable AGC
	WriteL3Addr(UDA1341_ADDR_DATA0);
	WriteL3Data(0xC4,0);       //11000,100  : DATA0, Extended addr(100) 
	WriteL3Data(0xe0,0);       //111,000,00 : DATA0, AGC=Off, IG[0,1]=0

	WriteL3Addr(UDA1341_ADDR_DATA0);
	WriteL3Data(0xC4,0);       //11000,101  : DATA0, Extended addr(101) 
	WriteL3Data(0xe8,0);       //111,01000 : DATA0, IG[6:2]=01000

	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)(S3C2440A_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)(S3C2440A_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
-------------------------------------------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线不卡免费看| 国产精品久线在线观看| 国产精品国产馆在线真实露脸| 亚洲影视资源网| 成人午夜视频在线观看| 日韩免费观看高清完整版| 亚洲日本成人在线观看| 国产精品一区二区在线观看网站| 欧美在线一二三四区| 中文字幕欧美日本乱码一线二线| 日本欧美在线看| 欧美日韩一区二区三区在线| 亚洲乱码国产乱码精品精小说| 国产精品一区二区不卡| 日韩免费性生活视频播放| 亚洲地区一二三色| 91高清视频免费看| 亚洲视频一区在线观看| av一区二区三区四区| 亚洲精品一区二区精华| 日本在线观看不卡视频| 欧美网站一区二区| 夜夜嗨av一区二区三区网页| 成人午夜在线视频| 国产欧美日韩卡一| 国产福利一区二区| 国产日韩欧美电影| 国产精品一区二区在线看| 欧美激情一二三区| 国产一区在线观看视频| 精品国产乱码91久久久久久网站| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲成人动漫精品| 欧美影片第一页| 午夜精品成人在线| 日韩欧美视频一区| 国产成人自拍高清视频在线免费播放| 欧美一区二区三区免费大片| 秋霞午夜av一区二区三区| 欧美一区三区四区| 激情亚洲综合在线| 中文字幕成人av| 一本久久a久久精品亚洲| 亚洲男人天堂一区| 欧美三级电影在线观看| 视频一区二区中文字幕| 日韩女优制服丝袜电影| 丁香婷婷深情五月亚洲| 亚洲丝袜美腿综合| 欧美精品一二三区| 国产一区二区在线视频| 国产欧美日韩一区二区三区在线观看| av在线免费不卡| 亚洲高清免费在线| 2022国产精品视频| 91在线看国产| 日本不卡在线视频| 国产日韩精品一区二区三区 | 蜜桃一区二区三区四区| 久久麻豆一区二区| 一本久久a久久免费精品不卡| 亚瑟在线精品视频| 久久蜜臀精品av| 欧美午夜一区二区| 国产一区二区电影| 亚洲国产婷婷综合在线精品| 精品久久久久久久久久久久久久久 | 欧美在线观看一二区| 日韩精品1区2区3区| 国产色产综合色产在线视频| 欧美自拍丝袜亚洲| 国产在线精品不卡| 亚洲第一福利视频在线| 国产无人区一区二区三区| 在线观看亚洲一区| 国产.欧美.日韩| 日本不卡高清视频| 自拍视频在线观看一区二区| 日韩免费在线观看| 欧美日韩亚洲国产综合| 丁香六月综合激情| 成人污污视频在线观看| 日日夜夜精品视频天天综合网| 国产亚洲一二三区| 91精品免费在线| 91亚洲精华国产精华精华液| 久久成人18免费观看| 亚洲精品大片www| 日本一区二区三区电影| 日韩精品一区国产麻豆| 欧美探花视频资源| 97久久精品人人爽人人爽蜜臀| 激情六月婷婷久久| 男人操女人的视频在线观看欧美| 亚洲女同女同女同女同女同69| 久久美女高清视频| 精品久久人人做人人爽| 日韩一区二区三区视频在线| 欧美日韩成人激情| 欧美三区在线观看| 欧美中文字幕亚洲一区二区va在线| 成人av电影免费在线播放| 激情六月婷婷久久| 久久9热精品视频| 久久福利资源站| 精品一区二区三区视频| 日韩精品乱码免费| 青青草成人在线观看| 日韩av电影免费观看高清完整版 | 欧美日韩aaaaa| 欧美午夜寂寞影院| 欧美日韩成人一区二区| 欧美日韩国产精品自在自线| 欧美色欧美亚洲另类二区| 在线免费视频一区二区| 色婷婷国产精品综合在线观看| 91色九色蝌蚪| 欧美图片一区二区三区| 欧美日韩国产美女| 7777精品伊人久久久大香线蕉经典版下载 | 欧美国产一区在线| 中文字幕的久久| 亚洲精品欧美激情| 亚洲电影中文字幕在线观看| 性做久久久久久久免费看| 首页国产欧美久久| 久久国产精品99精品国产| 国产一区二区三区观看| 成人一级黄色片| 色婷婷综合久久久久中文一区二区| 一本大道久久a久久综合婷婷| 在线视频国内自拍亚洲视频| 欧美高清你懂得| 久久久一区二区三区捆绑**| 国产偷国产偷亚洲高清人白洁| 国产精品丝袜在线| 亚洲宅男天堂在线观看无病毒| 婷婷成人激情在线网| 久久99精品久久只有精品| 国产69精品久久99不卡| 欧美性感一区二区三区| 精品国产一区二区三区四区四| 日本一区二区三区dvd视频在线| 亚洲少妇最新在线视频| 三级在线观看一区二区| 国产一区视频导航| 色先锋aa成人| 日韩精品一区二区三区视频在线观看| 久久久久久久久久久久久久久99| 中文字幕一区二区三区不卡在线 | 欧美哺乳videos| 中文字幕中文字幕一区二区| 亚洲一区二三区| 国产不卡在线一区| 91精品国产麻豆| 亚洲欧洲日韩av| 精彩视频一区二区| 欧美在线免费视屏| 国产欧美va欧美不卡在线| 亚洲bt欧美bt精品777| 成人国产精品视频| 日韩美女视频一区二区在线观看| 亚洲国产精品av| 奇米影视在线99精品| 91在线视频在线| 久久综合九色综合97婷婷| 亚洲一区二区三区爽爽爽爽爽| 韩国毛片一区二区三区| 欧美精品三级在线观看| 国产精品久久久久桃色tv| 狠狠色狠狠色合久久伊人| 在线观看免费成人| 国产精品不卡在线| 国产mv日韩mv欧美| 久久亚洲私人国产精品va媚药| 亚洲va国产va欧美va观看| 色呦呦一区二区三区| 国产欧美精品一区aⅴ影院 | 久久亚洲综合色一区二区三区| 亚洲成av人片在www色猫咪| 色综合久久久久综合99| 中文字幕+乱码+中文字幕一区| 久久国内精品视频| 日韩一卡二卡三卡国产欧美| 亚洲国产婷婷综合在线精品| 色婷婷av一区二区三区gif| 国产精品每日更新| 成人免费高清视频| 中文字幕一区二区三区色视频 | 欧美午夜免费电影| 亚洲三级在线播放| 91同城在线观看| 亚洲同性gay激情无套| youjizz国产精品| 日本一二三四高清不卡| 福利视频网站一区二区三区| 国产亚洲精品7777| 99久久久精品| 亚洲九九爱视频| 欧美在线观看视频一区二区|