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

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

?? hwctxt.cpp

?? 包含了大量文件
?? CPP
?? 第 1 頁 / 共 4 頁
字號(hào):
//
// 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!(IIC_Initialize)
    
	//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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区影院| 成人一级片网址| 日本一区二区免费在线观看视频| 99久久免费国产| 男女男精品视频| 日韩毛片一二三区| 久久在线观看免费| 欧美调教femdomvk| 国产.欧美.日韩| 久久国产精品72免费观看| 一区二区三区在线看| 久久久久国产免费免费| 欧美久久久久久久久中文字幕| 国产福利一区二区三区视频| 全国精品久久少妇| 一区二区三区 在线观看视频 | 91国产免费看| 国产美女主播视频一区| 日韩高清中文字幕一区| 亚洲另类一区二区| 中文字幕va一区二区三区| 欧美成人vps| 欧美日韩国产高清一区二区三区 | 国产亚洲欧美日韩在线一区| 宅男在线国产精品| 在线观看欧美黄色| 97aⅴ精品视频一二三区| 国产成人av电影在线播放| 日本va欧美va精品| 亚洲高清在线精品| 亚洲精品成人天堂一二三| 国产精品久久久久久久久免费丝袜| 精品第一国产综合精品aⅴ| 欧美一卡二卡在线观看| 欧美伦理电影网| 欧美日韩国产成人在线免费| 在线精品视频免费播放| 972aa.com艺术欧美| 北岛玲一区二区三区四区| 国产成人啪午夜精品网站男同| 91麻豆文化传媒在线观看| 成人深夜福利app| 国产高清视频一区| 国产成人午夜精品影院观看视频| 国产高清在线观看免费不卡| 国产一区日韩二区欧美三区| 国产一区二区三区四| 韩国三级电影一区二区| 激情成人午夜视频| 国产精品1区二区.| 粉嫩av亚洲一区二区图片| 成人一区二区视频| av中文字幕在线不卡| 91女厕偷拍女厕偷拍高清| 91麻豆国产福利在线观看| 色先锋久久av资源部| 色噜噜狠狠色综合中国| 欧美主播一区二区三区| 欧美妇女性影城| 日韩欧美视频在线| 26uuu精品一区二区在线观看| 国产亚洲女人久久久久毛片| 国产免费久久精品| 亚洲免费视频成人| 日韩激情一二三区| 韩国成人在线视频| 成人黄色av电影| 欧美优质美女网站| 欧美一卡2卡三卡4卡5免费| 欧美成人a∨高清免费观看| 国产日韩成人精品| 一区二区三区在线视频免费 | 亚洲成人黄色小说| 麻豆国产一区二区| 成人午夜精品在线| 欧美在线一区二区| 精品成人一区二区三区四区| 日本一区二区三区电影| 亚洲午夜av在线| 美女视频第一区二区三区免费观看网站| 激情文学综合插| 色婷婷精品大在线视频| 欧美一区二区三区视频免费| 国产丝袜欧美中文另类| 夜夜爽夜夜爽精品视频| 久久爱另类一区二区小说| 成人免费毛片嘿嘿连载视频| 欧美在线免费观看视频| 久久久亚洲精品一区二区三区| 国产精品成人一区二区三区夜夜夜| 亚洲成人午夜电影| 国产精品系列在线播放| 欧美日韩在线不卡| 欧美韩日一区二区三区四区| 亚洲大片在线观看| 福利一区福利二区| 69堂成人精品免费视频| 中文字幕在线一区二区三区| 爽爽淫人综合网网站| 成人av资源在线观看| 91麻豆精品国产91久久久使用方法 | 91小视频在线免费看| 欧美一区二区视频网站| 亚洲欧美日韩在线| 国产一区二区三区四区五区美女 | 91精品婷婷国产综合久久性色| 中文字幕成人av| 免费在线视频一区| 色天天综合色天天久久| 日本一区二区三区四区在线视频 | 波多野洁衣一区| 精品欧美久久久| 日日夜夜精品视频天天综合网| 99久久精品国产精品久久| 久久影院视频免费| 免费的成人av| 欧美日韩国产成人在线免费| 亚洲人成电影网站色mp4| 国产精品456| 久久这里只有精品首页| 丝袜国产日韩另类美女| 欧美色手机在线观看| 亚洲丝袜自拍清纯另类| 丁香激情综合国产| 久久久天堂av| 久久精品二区亚洲w码| 7777精品伊人久久久大香线蕉| 亚洲午夜久久久久久久久久久| thepron国产精品| 国产精品视频九色porn| 国产精品系列在线播放| 久久婷婷久久一区二区三区| 日本aⅴ免费视频一区二区三区| 欧美精品视频www在线观看| 亚洲成av人片一区二区三区| 在线亚洲+欧美+日本专区| 亚洲免费观看高清完整| 91天堂素人约啪| 亚洲天堂久久久久久久| 97se亚洲国产综合自在线观| 中文字幕在线不卡| 91麻豆国产福利精品| 国产精品国模大尺度视频| av爱爱亚洲一区| 自拍偷自拍亚洲精品播放| 91一区二区三区在线播放| 中文字幕综合网| 欧美专区日韩专区| 亚洲成av人影院| 欧美一区二区精品久久911| 美女网站视频久久| 欧美精品一区二区三区高清aⅴ| 狠狠久久亚洲欧美| 欧美激情一区二区三区在线| 成人妖精视频yjsp地址| 亚洲视频资源在线| 在线观看日韩电影| 美女www一区二区| 久久久亚洲国产美女国产盗摄 | 毛片av中文字幕一区二区| 日韩精品一区二区在线观看| 国产一区二区三区四区五区美女 | 精品不卡在线视频| 国产成人免费视| 亚洲视频1区2区| 欧美色涩在线第一页| 久久疯狂做爰流白浆xx| 国产欧美一区二区精品忘忧草| 9人人澡人人爽人人精品| 亚洲高清免费观看高清完整版在线观看| 欧美视频中文字幕| 免费不卡在线观看| 国产精品―色哟哟| 欧美乱妇一区二区三区不卡视频| 久久99精品一区二区三区| 国产精品麻豆视频| 欧美日韩一区二区三区在线看| 激情综合色播激情啊| 亚洲欧洲av一区二区三区久久| 欧美日高清视频| 国产精品69毛片高清亚洲| 亚洲最新在线观看| 精品国内片67194| 久久久久久久精| 在线免费亚洲电影| 国产一区二区三区四区五区美女| 自拍偷自拍亚洲精品播放| 日韩欧美国产不卡| 色综合久久九月婷婷色综合| 日本不卡的三区四区五区| 国产精品无圣光一区二区| 在线播放视频一区| www.欧美色图| 久久99精品国产| 亚洲一区二区四区蜜桃| 国产三区在线成人av| 欧美日韩亚洲国产综合| 国产成人av一区二区| 丝袜亚洲另类欧美综合| 亚洲三级在线看|