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

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

?? hwctxt.cpp.bak

?? 包含了大量文件
?? BAK
?? 第 1 頁 / 共 4 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
#include "wavemain.h"
#include "p2.h"
#include "s2440.h"
#include "dma.h"
#include "I2S.h"
#include "utldrv.h"
#include "hwctxt.h"
#include "IIC.h"
#include "Pm.h"
#include "winioctl.h"
#include "pkfuncs.h"
//#include "Volumecontrol.h"

#include <notify.h>

#define DMA_CH_MIC 2
#define DMA_CH_OUT 1

#define DELAY_COUNT	0x100000

int rec_mode=0;

//-------------------------------- Global Variables --------------------------------------
volatile IISreg		*v_pIISregs		= NULL;		// I2S control registers
volatile IICreg     *v_pIICregs     = NULL;     //IIC control registers
volatile IOPreg		*v_pIOPregs		= NULL;		// GPIO registers (needed to enable I2S and SPI)
volatile DMAreg		*v_pDMAregs		= NULL;		// DMA registers (needed for I/O on I2S bus)
volatile CLKPWRreg	*g_pCLKPWRreg	= NULL;		// Clock power registers (needed to enable I2S and SPI clocks)
volatile INTreg 	*s2440INT 		= NULL;
volatile PWMreg   *v_pPWMreg    =NULL;


UTL_FASTCALL    g_tblFastCall;							// Needed for fast driver->driver calling mechanism
HANDLE          g_hUTLObject		= INVALID_HANDLE_VALUE;

HardwareContext *g_pHWContext		= NULL;

unsigned int delay_count;
//----------------------------------------------------------------------------------------
//BOOL gHP_flag=false;

//bool gb_changed=false; //

//bool b_prolevel=false;
//bool b_nowlevel=false;

//HANDLE m_hVolumeIncrEvent=NULL;
//HANDLE m_hVolumeReduEvent=NULL;
//HANDLE m_hBKLightEvent=NULL;
//bool gb_HP_changed=false;
//bool gb_SP_changed=false;
//---------------------------------------------
DBGPARAM dpCurSettings = {
    TEXT("CONSOLE"), {
        TEXT("0"),TEXT("1"),TEXT("2"),TEXT("3"),
			TEXT("4"),TEXT("5"),TEXT("6"),TEXT("7"),
			TEXT("8"),TEXT("9"),TEXT("10"),TEXT("11"),
			TEXT("12"),TEXT("Function"),TEXT("Init"),TEXT("Error")},
			0x8000  // Errors only, by default
}; 

//void dump_audio_input_sfr(void);


BOOL HardwareContext::CreateHWContext(DWORD Index)
{
    if (g_pHWContext)
    {
        return TRUE;
    }
	
    g_pHWContext = new HardwareContext;
    if (!g_pHWContext)
    {
        return FALSE;
    }
	
    return g_pHWContext->Init(Index);
}

HardwareContext::HardwareContext()  //
: m_InputDeviceContext(), m_OutputDeviceContext()
{
    InitializeCriticalSection(&m_Lock);
    m_Initialized=FALSE;
}

HardwareContext::~HardwareContext()
{
    DeleteCriticalSection(&m_Lock);
}

BOOL HardwareContext::Init(DWORD Index)
{
    if (m_Initialized)
    {
        return FALSE;
    }
	
	//----- 1. Initialize the state/status variables -----
    m_DriverIndex		= Index;
    m_IntrAudio         = SYSINTR_AUDIO;
    m_InPowerHandler    = FALSE;
    m_InputDMARunning   = FALSE;
    m_OutputDMARunning  = FALSE;
	  m_InputDMAStatus	= DMA_CLEAR;				
    m_OutputDMAStatus	= DMA_CLEAR;				
	
    Headset_InterruptEvent =NULL;
    Headset_InterruptThread=NULL;
    
    //----- 2. Map the necessary descriptory channel and control registers into the driver's virtual address space -----
	if(!MapRegisters())   //iis initialed!
	{
		DEBUGMSG(ZONE_ERROR, (TEXT("WAVEDEV.DLL:HardwareContext::Init() - Failed to map config registers.\r\n")));
        return FALSE;
	}
	
    //----- 3. Map the DMA buffers into driver's virtual address space -----
    if(!MapDMABuffers())
    {
		DEBUGMSG(ZONE_ERROR, (TEXT("WAVEDEV.DLL:HardwareContext::Init() - Failed to map DMA buffers.\r\n")));
        return FALSE;
    }
	
    //----- 4. Configure the Codec -----
    InitCodec();     //Initial IIC pin!
    
	//InitializeCriticalSection(&m_Lock);  //critical section been initialized!
	
	
	//----- 5. Initialize the interrupt thread -----
    if (!InitInterruptThread())
    {
		DEBUGMSG(ZONE_ERROR, (TEXT("WAVEDEV.DLL:HardwareContext::Init() - Failed to initialize interrupt thread.\r\n")));
        return FALSE;
    }
    m_Initialized=TRUE;
	
    //
    // Power Manager expects us to init in D0.
    // We are normally in D4 unless we are opened for play.
    // Inform the PM.
    //
    m_Dx = D0;
    //Audio power statue  power down!  D4 is mean off!
    DevicePowerNotify(_T("MAX1:"),(_CEDEVICE_POWER_STATE)D4, POWER_NAME);
    //VOLUME CONTROL!!!
    //SoundControlInit();
    //song
    return TRUE;
}



BOOL HardwareContext::MapRegisters()
{
    
    
   v_pIISregs = (volatile IISreg *)VirtualAlloc(0,sizeof(IISreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!v_pIISregs)
	{
		DEBUGMSG(1,(TEXT("IISreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)v_pIISregs,(PVOID)(IIS_BASE),sizeof(IISreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("IISreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	//////////////////////////////////////////////////////////////////////////////
    v_pIICregs = (volatile IICreg *)VirtualAlloc(0,sizeof(IICreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!v_pIICregs)
	{
		DEBUGMSG(1,(TEXT("IICreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)v_pIICregs,(PVOID)(IIC_BASE),sizeof(IICreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("IICreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	///////////////////////////////////////////////////////////////////////////////
	v_pIOPregs = (volatile IOPreg *)VirtualAlloc(0,sizeof(IOPreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!v_pIOPregs)
	{
		DEBUGMSG(1,(TEXT("IOPreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)v_pIOPregs,(PVOID)(IOP_BASE),sizeof(IOPreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("IOPreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	/////////////////////////////////////////////////////////////////////////////////////////
	v_pDMAregs = (volatile DMAreg *)VirtualAlloc(0,sizeof(DMAreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!v_pDMAregs)
	{
		DEBUGMSG(1,(TEXT("DMAreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)v_pDMAregs,(PVOID)(DMA_BASE),sizeof(DMAreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("DMAreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	/////////////////////////////////////////////////////////////////////////////////////////////////
	s2440INT = (volatile INTreg *)VirtualAlloc(0,sizeof(INTreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!v_pDMAregs)
	{
		DEBUGMSG(1,(TEXT("INTreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)s2440INT,(PVOID)(INT_BASE),sizeof(INTreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("INTreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	///////////////////////////////////////////////////////////////////////////////////////////////////////////
	g_pCLKPWRreg = (volatile CLKPWRreg *)VirtualAlloc(0,sizeof(CLKPWRreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!g_pCLKPWRreg)
	{
		DEBUGMSG(1,(TEXT("DMAreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)g_pCLKPWRreg,(PVOID)(CLKPWR_BASE),sizeof(CLKPWRreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("DMAreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	////////////////////////////////////////////////
    v_pPWMreg = (volatile PWMreg  *)VirtualAlloc(0,sizeof(PWMreg),MEM_RESERVE, PAGE_NOACCESS);
	if (!v_pPWMreg)
	{
		DEBUGMSG(1,(TEXT("DMAreg: VirtualAlloc failed!\r\n")));
		return FALSE;
	}
	if (!VirtualCopy((PVOID)v_pPWMreg,(PVOID)(PWM_BASE),sizeof(PWMreg), PAGE_READWRITE | PAGE_NOCACHE ))
	{
		DEBUGMSG(1,(TEXT("DMAreg: VirtualCopy failed!\r\n")));
		return FALSE;
	}
	///////////////////////////////////////////////////  
  PowerUp();       //initial IIS !
	
	return TRUE;
}



BOOL HardwareContext::Deinit()
{
	//----- 1. Disable the input/output channels -----
	//	AUDIO_IN_DMA_DISABLE();
	//	v_pIISregs->rIISCON &= ~RECEIVE_DMA_REQUEST_ENABLE;	
	//	v_pIISregs->rIISFCON &= ~( RECEIVE_FIFO_ACCESS_DMA  | RECEIVE_FIFO_ENABLE);	
	//	v_pDMAregs->rDMASKTRIG1 |= STOP_DMA_TRANSFER;
	//	v_pDMAregs->rDMASKTRIG1 &= ~ENABLE_DMA_CHANNEL;;
	
	//AUDIO_OUT_DMA_DISABLE();
	v_pDMAregs->rDMASKTRIG2 |= STOP_DMA_TRANSFER;
	v_pDMAregs->rDMASKTRIG2 &= ~ENABLE_DMA_CHANNEL;
	
	//----- 2. Disable/clear DMA input/output interrupts -----
	//AUDIO_IN_CLEAR_INTERRUPTS();
	v_pDMAregs->rDCON1 = v_pDMAregs->rDCON1;
	
	//AUDIO_OUT_CLEAR_INTERRUPTS();
	v_pDMAregs->rDCON2 = v_pDMAregs->rDCON2;
	
	//----- 3. Turn the audio hardware off -----
	//AudioMute(IIC_OUTPUT_CHANNEl|IIC_INPUT_CHANNEl, TRUE);
	
	//----- 4. Unmap the control registers and DMA buffers -----
	UnmapRegisters();
	UnmapDMABuffers();
	
	return TRUE;
}



BOOL HardwareContext::UnmapRegisters()
{
	//----- 1. Free the fast driver-->driver calling mechanism object -----
	if(g_hUTLObject) 
	{
		CloseHandle(g_hUTLObject);
	}
	
	return TRUE;
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		MapDMABuffers()

  Description:	Maps the DMA buffers used for audio input/output
  on the I2S bus.
  
	Returns:		Boolean indicating success
-------------------------------------------------------------------*/
BOOL HardwareContext::MapDMABuffers()
{
	BOOL bSuccess=FALSE;
	
	PBYTE pTemp;
	
	//----- 1. Allocate a block of virtual memory big enough to hold the DMA buffers -----
	if(!(pTemp = (PBYTE)VirtualAlloc(0, AUDIO_DMA_PAGE_SIZE * 4, MEM_RESERVE, PAGE_NOACCESS)))
	{
		DEBUGMSG(ZONE_ERROR, (TEXT("WAVEDEV.DLL:HardwareContext::MapDMABuffers() - Unable to allocate memory for DMA buffers!\r\n")));
		goto MAP_ERROR;
	}
	
	//----- 2. Map the physical DMA buffer to the virtual address we just allocated -----
	if(!VirtualCopy((LPVOID)pTemp, (LPVOID)AUDIO_DMA_BUFFER_BASE, (AUDIO_DMA_PAGE_SIZE * 4), //4*2048
		PAGE_READWRITE | PAGE_NOCACHE))
	{
		DEBUGMSG(ZONE_ERROR, (TEXT("WAVEDEV.DLL:HardwareContext::MapDMABuffers() - VirtualCopy() failed when binding DMA buffers.\r\n")));
		goto MAP_ERROR;
	}
	
	//----- 3. 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] = pTemp;
	m_Output_pbDMA_PAGES[1] = pTemp + AUDIO_DMA_PAGE_SIZE;
	m_Input_pbDMA_PAGES[0]  = pTemp + 2*AUDIO_DMA_PAGE_SIZE;
	m_Input_pbDMA_PAGES[1]  = pTemp + 3*AUDIO_DMA_PAGE_SIZE;
	
	return TRUE;
	
MAP_ERROR:
	if(pTemp)
		VirtualFree(pTemp, 0, MEM_RELEASE);
	
	return FALSE;
}




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()
{
	//****** Port B Initialize *****
	
	return TRUE;
}


BOOL HardwareContext::InitCodec()
{   
	//HP detection interrupt trigger !
	//v_pIOPregs->rGPFCON &= ~(0x3 << 2);//input
	
	///////////////////////////////////////////////////////////
	 //keybutton interrupt!
	 //v_pIOPregs->rGPFCON  &= ~(0x3<<6|0x3<<14); // eint  3 7           	   
   //v_pIOPregs->rGPFCON  |= (0x2<<6|0x2<<14);
   //v_pIOPregs->rGPFUP&=0x0;  //pull-up enable!
    
   //v_pIOPregs->rEXTINT0&=~(0x7<<12|0x7<<28);
    
  // v_pIOPregs->rEXTINT0|=(0x2<<12|0x2<<28);  //Falling edge triggered
   //////////////////////////////////////////   
   //bklight!
   //v_pIOPregs->rGPGCON&=~(0x3<<22); //GPG11
	 //v_pIOPregs->rGPGCON|=(0x1<<22);  //output!
   //v_pIOPregs->rGPGUP&=~(0x1<<22);   //pull-up enable!
   
   //v_pIOPregs->rGPGDAT|=(0x1<<11);   //output 1  close light!
   //////////////////////////////////////
	
	IIC_Initialize();
	
	return TRUE;
}

BOOL HardwareContext::InitOutputDMA()
{
	
	//RETAILMSG(1,(TEXT("-------InitOutputDMA----------!\r\n")));
	//----- 1. Initialize the DMA channel for output mode and use the first output DMA buffer -----
	//Base address of source data to transfer!
	v_pDMAregs->rDISRC2	= (int)(AUDIO_DMA_BUFFER_PHYS);  
	//ahb bus  !  increment!   //0x02                     0x01
	v_pDMAregs->rDISRCC2 &= ~(SOURCE_PERIPHERAL_BUS | FIXED_SOURCE_ADDRESS);//(11)				// Source is system bus, increment addr
	
	
	//----- 2. Initialize the DMA channel to send data over the I2S bus -----
	//Base address (start address) of destination for the transfer.
	v_pDMAregs->rDIDST2	= (int)IISFIF_PHYS; //DMA's address of the FIFO register! 
	//(11)   apb bus ! fixed!
	v_pDMAregs->rDIDSTC2 |= (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(unit) tx, single service, I2SSDO, I2S request, no(problem) auto-reload, half-word, tx count
	//31   29  (0)   23   20  (1k)  
	v_pDMAregs->rDCON2	= (  HANDSHAKE_MODE | GENERATE_INTERRUPT | I2SSDO_DMA2 | DMA_TRIGGERED_BY_HARDWARE 
		| TRANSFER_HALF_WORD | (AUDIO_DMA_PAGE_SIZE / 2 ) );//1024
	
	//----- 4. Reset the playback pointers -----
	//AUDIO_RESET_PLAYBACK_POINTER();
	//ioPlaybackPointerLow  (v_pDMAregs->rDISRC2)
	ioPlaybackPointerLow  = (AUDIO_DMA_BUFFER_PHYS);  
	//(v_pDMAregs->rDISRC2)
	ioPlaybackPointerHigh = (AUDIO_DMA_BUFFER_PHYS + AUDIO_DMA_PAGE_SIZE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色偷偷大香| 欧美日韩精品欧美日韩精品一综合| 国产精品一区一区三区| 成人app在线| 日韩精品在线网站| 亚洲精品国产一区二区三区四区在线| 免费观看日韩电影| 色哟哟国产精品| 国产亚洲欧洲一区高清在线观看| 亚洲成a人在线观看| av电影在线不卡| 欧美精品一区二区三区蜜桃视频| 一区二区三区中文在线| 丁香一区二区三区| 久久综合五月天婷婷伊人| 亚洲不卡一区二区三区| 成人avav在线| 久久精品视频一区二区三区| 成人av影视在线观看| 日韩视频一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 成人三级在线视频| 国产亚洲欧美激情| 国产一区二区不卡老阿姨| 精品国产免费视频| 蜜桃精品在线观看| 欧美一区二区三区在| 婷婷丁香久久五月婷婷| 欧美日韩国产经典色站一区二区三区 | 在线不卡免费av| 亚洲一区在线电影| 欧美视频自拍偷拍| 亚洲精品视频在线观看免费| 99精品视频在线播放观看| 中文av一区特黄| 激情国产一区二区| 国产在线播精品第三| 一本到不卡免费一区二区| 国产欧美日韩精品一区| 亚洲午夜精品在线| 色噜噜狠狠色综合欧洲selulu| 国产精品网站在线观看| 成人激情免费电影网址| 国产精品初高中害羞小美女文| 国产成人精品免费一区二区| 国产日韩精品一区| 色综合婷婷久久| 亚洲尤物视频在线| 欧美一区欧美二区| 国产一区91精品张津瑜| 91在线看国产| 亚洲午夜精品久久久久久久久| 国产精品综合在线视频| 热久久一区二区| 亚洲精品欧美专区| 久久99久久99| 亚洲亚洲人成综合网络| 国产精品久久久久久久久快鸭| 日韩一区二区三区视频在线| 欧美日韩中文字幕一区二区| 99久免费精品视频在线观看| 国产精品一色哟哟哟| 久久精品72免费观看| 丝袜美腿成人在线| 亚洲成人激情av| 亚洲综合清纯丝袜自拍| 国产精品国产三级国产有无不卡 | 亚洲一区二区三区四区在线观看| 国产精品乱码一区二区三区软件 | 国产精品女同一区二区三区| 久久综合九色综合欧美就去吻| 91精品国产美女浴室洗澡无遮挡| 在线国产亚洲欧美| 日本伦理一区二区| 欧美在线观看视频一区二区三区| 91看片淫黄大片一级在线观看| 国产ts人妖一区二区| 国产一区在线看| 国产剧情一区二区三区| 国产福利电影一区二区三区| 国产精品123区| 国产精品一区二区三区网站| 国产精品中文字幕日韩精品| 国产一区二区三区四区五区美女| 韩国女主播成人在线观看| 久久国产精品99久久人人澡| 黄色小说综合网站| 国产一区二区三区久久久| 国产一区二区三区av电影| 国产黑丝在线一区二区三区| 不卡av在线免费观看| 一本一本久久a久久精品综合麻豆| av中文字幕不卡| 91美女在线观看| 欧美日韩激情一区| 欧美变态凌虐bdsm| 中文字幕不卡三区| 亚洲精品网站在线观看| 日日骚欧美日韩| 精品一区二区日韩| 成人性生交大片免费看视频在线 | 久久色视频免费观看| 国产欧美一区二区在线| 亚洲另类在线制服丝袜| 国产99久久久国产精品潘金| www.av精品| 欧美日韩久久一区二区| 2024国产精品视频| ...av二区三区久久精品| 亚洲一区精品在线| 韩国理伦片一区二区三区在线播放| 国产福利91精品一区| 91丝袜高跟美女视频| 日韩一级片在线播放| 国产女主播在线一区二区| 亚洲综合视频网| 狠狠色丁香久久婷婷综| 92国产精品观看| 欧美大片免费久久精品三p | 亚洲视频精选在线| 日韩av不卡一区二区| 成人小视频免费在线观看| 欧美另类z0zxhd电影| 国产午夜精品在线观看| 亚洲成人av在线电影| 国产盗摄一区二区| 在线91免费看| 亚洲欧洲日韩在线| 另类小说视频一区二区| 在线免费观看日本欧美| 久久免费午夜影院| 天天综合天天综合色| av成人免费在线观看| 日韩精品一区二区三区在线播放| 亚洲免费av在线| 国产伦精品一区二区三区在线观看| 欧美午夜精品一区二区三区| 欧美国产日产图区| 免费看精品久久片| 在线观看亚洲精品视频| 中文一区二区完整视频在线观看| 日日夜夜免费精品| 在线欧美一区二区| 亚洲视频电影在线| 丁香婷婷综合网| 欧美精品一区二区三区在线播放 | 不卡电影一区二区三区| 欧美成人三级电影在线| 午夜视频在线观看一区二区| 99久久精品国产毛片| 国产三级精品视频| 麻豆91免费观看| 欧美日本韩国一区二区三区视频| 亚洲欧洲国产日本综合| 国产精品888| 精品粉嫩超白一线天av| 蜜臀久久久久久久| 欧美精品久久久久久久久老牛影院| 亚洲免费av在线| 91天堂素人约啪| 亚洲美女视频一区| 色综合网站在线| 一区二区三区欧美久久| 91视频观看视频| 7777精品伊人久久久大香线蕉完整版| 色成人在线视频| 日韩欧美美女一区二区三区| 五月开心婷婷久久| 717成人午夜免费福利电影| 亚洲制服丝袜av| 国产人伦精品一区二区| 国产精品亚洲一区二区三区妖精| 精品国产123| 国产一区二区三区在线观看精品| 亚洲精品一区二区三区四区高清 | 国产精品电影院| 不卡欧美aaaaa| 亚洲精品高清在线观看| 欧洲精品一区二区三区在线观看| 亚洲一区二区三区四区的| 欧美日韩精品二区第二页| 热久久国产精品| 久久人人97超碰com| 成人精品国产免费网站| 亚洲乱码国产乱码精品精的特点 | 一本色道久久综合亚洲精品按摩| 亚洲婷婷国产精品电影人久久| 色婷婷综合久久久久中文一区二区| 中文字幕一区二区三区四区| 99国产精品一区| 午夜精品久久久久久久久| 精品国产一区久久| 国产凹凸在线观看一区二区| 亚洲欧美一区二区三区国产精品| 色丁香久综合在线久综合在线观看| 午夜欧美在线一二页| 精品国产制服丝袜高跟| 99国产精品国产精品毛片| 五月激情六月综合| 国产午夜精品久久久久久久 |