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

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

?? gspx-pxa.c

?? Wince BSP 下的Wifi 驅動 基于PXA270 CPU
?? C
?? 第 1 頁 / 共 5 頁
字號:
	pHC->read_desc = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, sizeof(DMADescriptorChannelType)*2, &PA, FALSE);
    if (pHC->read_desc) {
        pHC->read_desc_phys_addr = (DMADescriptorChannelType *) PA.LowPart;
    }

	pHC->write_desc = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, sizeof(DMADescriptorChannelType)*2, &PA, FALSE);
    if (pHC->write_desc) {
        pHC->write_desc_phys_addr = (DMADescriptorChannelType *) PA.LowPart;
    }

	pHC->rw_desc = (DMADescriptorChannelType *) HalAllocateCommonBuffer(&Adapter, sizeof(DMADescriptorChannelType)*2, &PA, FALSE);
    if (pHC->rw_desc) {
        pHC->rw_desc_phys_addr = (DMADescriptorChannelType *) PA.LowPart;
    }
#endif ///(USE_DMA == 1)
	///Allocate I/O buffers
	pHC->iodata = (PBYTE) HalAllocateCommonBuffer(&Adapter, PXA_SSP_IODATA_SIZE, &PA, FALSE);
    if (pHC->iodata) {
		pHC->phys_addr = (PBYTE)PA.LowPart;
    }

	pHC->iorw = (PBYTE) HalAllocateCommonBuffer(&Adapter, PXA_SSP_IODATA_SIZE, &PA, FALSE);
    if (pHC->iorw) {
		pHC->phys_addr_rw = (PBYTE)PA.LowPart;
    }

///#if (USE_DMA == 1)
	///Get the DMA channel

	///==============================================================
	///Initialize the DMA channel parameters
	pHC->DMAParam[RDDMA_PARAM].pDMARegs = pHC->pDMARegs;
	pHC->DMAParam[RDDMA_PARAM].channel = DMA_CH_READ;
	if(!(pHC->DMAParam[RDDMA_PARAM].dmaWaitObj = CreateEvent( NULL, FALSE, FALSE,NULL))) {
        GSPIMSG(ERRMSG, (TEXT("Init rddmaWaitObj, CreateEvent FAILED")));
		result = -1;
        goto errFuncRet;
    }

	pHC->DMAParam[WTDMA_PARAM].pDMARegs = pHC->pDMARegs;
	pHC->DMAParam[WTDMA_PARAM].channel = DMA_CH_RW;
	if(!(pHC->DMAParam[WTDMA_PARAM].dmaWaitObj = CreateEvent( NULL, FALSE, FALSE,NULL))) {
        GSPIMSG(ERRMSG, (TEXT("Init wtdmaWaitObj, CreateEvent FAILED")));
		result = -1;
        goto errFuncRet;
    }

	if(DMA_CHMAP_SSP_RX > 63)
	 {
		pHC->pDMARegs->drcmr2[DMA_CHMAP_SSP_RX - 64] = pHC->DMAParam[RDDMA_PARAM].channel | DRCMR_MAPVAL; 
	 }else
	 {
		pHC->pDMARegs->drcmr[DMA_CHMAP_SSP_RX] = pHC->DMAParam[RDDMA_PARAM].channel | DRCMR_MAPVAL; 
	 }

	if(DMA_CHMAP_SSP_TX > 63)
	{
		pHC->pDMARegs->drcmr2[DMA_CHMAP_SSP_TX - 64] = pHC->DMAParam[WTDMA_PARAM].channel | DRCMR_MAPVAL;  
	}else
	{
		pHC->pDMARegs->drcmr[DMA_CHMAP_SSP_TX] = pHC->DMAParam[WTDMA_PARAM].channel | DRCMR_MAPVAL;  
	}
	///==============================================================
	/// Request the DMA IRQ
	#if (USE_DMA == 1) && (USE_DMAIRQ == 1)
	pHC->hBusAcceHND = CreateBusAccessHandle( pg_szActiveKey );
	{
		int i;
		for (i=0 ; i<MAXDMA_PARAM ; i++) {
			pHC->DMAIntrInfo[i].irq = IRQ_DMAC;
			pHC->DMAIntrInfo[i].pIstFunc = (MYISTFUNC) dma_ist;
			pHC->DMAIntrInfo[i].param = (LPVOID)&pHC->DMAParam[i];
			pHC->DMAIntrInfo[i].IntrMask = 0x04;

			if (!BusTransBusAddrToStatic(pHC->hBusAcceHND, Internal, 0, DCSRAddr[i], sizeof(DWORD), &inIoSpace, &pHC->DMAIntrInfo[i].IntrRgPhysAddr)) {
				GSPIMSG(ERRMSG, (TEXT("installISR: Failed TransBusAddrToStatic - (read)\r\n")));
			}
			///RETAILMSG(1, (TEXT("installISR: PhysAddr: %xh\r\n"), pHC->DMAIntrInfo[i].IntrRgPhysAddr));
			///Initialize the interrupt, IST 
			setupInterrupt(&pHC->DMAIntrInfo[i]);
			///Load the ISR
			installISR(&pHC->DMAIntrInfo[i]);
		}
	}
	#endif ///USE_DMAIRQ

///#endif ///USE_DMA
#if (USE_DMA == 1)
	///
	///Configure the DMA descriptor
	{
		union DMACmdReg CmdBuff;
		volatile DMADescriptorChannelType*	descPt;

	    // set CMD values with bit fields.
		//
		CmdBuff.DcmdReg.len        = 0;		 // length of the memory buffer
		CmdBuff.DcmdReg.width      = 0x2;    // binary 10 (see quick Quick Reference sheet to DMA programming in the cotulla EAS)
		CmdBuff.DcmdReg.size       = 0x1;    // binary 01
		CmdBuff.DcmdReg.endian     = 0;      // little endian
		CmdBuff.DcmdReg.flybyt     = 0;      // Flowthrough
		CmdBuff.DcmdReg.flybys     = 0;      // Flowthrough
		CmdBuff.DcmdReg.endirqen   = 0;      // 1 means Interrupt when decrement length = 0;
		CmdBuff.DcmdReg.startirqen = 0;      // 1 means Interrupt when the desc is loaded
		CmdBuff.DcmdReg.flowtrg    = 0;      // 1 means the target is an external peripheral
		CmdBuff.DcmdReg.flowsrc    = 1;      // 1 means the source is an external peripheral (and needs flow control)
		CmdBuff.DcmdReg.inctrgadd  = 1;      // 1 means increment the target address (since it's memory)
		CmdBuff.DcmdReg.incsrcadd  = 0;      // 1 means increment the source address (since it's a peripheral)

		descPt = pHC->read_desc;
		descPt->ddadr = (UINT32)(pHC->read_desc_phys_addr + 1);
		descPt->dsadr = (UINT32)(&(phySSPBase->base.ssdr));
		descPt->dtadr = (UINT32) (pHC->phys_addr);
		descPt->dcmd  = CmdBuff.DcmdDword;                     // size and cmd values of the RcvA buffer
		///====================================================================
		// set CMD values with bit fields.
		//
		CmdBuff.DcmdReg.len        = 0;		 // length of the memory buffer
		CmdBuff.DcmdReg.width      = 0x2;    // binary 10 (see quick Quick Reference sheet to DMA programming in the cotulla EAS)
		CmdBuff.DcmdReg.size       = 0x1;    // binary 01
		CmdBuff.DcmdReg.endian     = 0;      // little endian
		CmdBuff.DcmdReg.flybyt     = 0;      // Flowthrough
		CmdBuff.DcmdReg.flybys     = 0;      // Flowthrough
		CmdBuff.DcmdReg.endirqen   = 0;      // 1 means Interrupt when decrement length = 0;
		CmdBuff.DcmdReg.startirqen = 0;      // 1 means Interrupt when the desc is loaded
		CmdBuff.DcmdReg.flowtrg    = 1;      // 1 means the target is an external peripheral
		CmdBuff.DcmdReg.flowsrc    = 0;      // 1 means the source is an external peripheral (and needs flow control)
		CmdBuff.DcmdReg.inctrgadd  = 0;      // 1 means increment the target address (since it's memory)
		CmdBuff.DcmdReg.incsrcadd  = 1;      // 1 means increment the source address (since it's a peripheral)

		descPt = pHC->write_desc;
		///descPt->ddadr = (UINT32)(pHC->write_desc_phys_addr + sizeof(DMADescriptorChannelType));
		descPt->ddadr = (UINT32)(pHC->write_desc_phys_addr + 1);
		descPt->dsadr = (UINT32) (pHC->phys_addr);

		///descPt->dtadr = (UINT32)(&(pHC->pSSPRegs->base.ssdr));
		descPt->dtadr = (UINT32)(&(phySSPBase->base.ssdr));
		
		descPt->dcmd  = CmdBuff.DcmdDword;                     // size and cmd values of the RcvA buffer

		///====================================================================
		// set CMD values with bit fields.
		//
		CmdBuff.DcmdReg.len        = 0;		 // length of the memory buffer
		CmdBuff.DcmdReg.width      = 0x2;    // binary 10 (see quick Quick Reference sheet to DMA programming in the cotulla EAS)
		CmdBuff.DcmdReg.size       = 0x1;    // binary 01
		CmdBuff.DcmdReg.endian     = 0;      // little endian
		CmdBuff.DcmdReg.flybyt     = 0;      // Flowthrough
		CmdBuff.DcmdReg.flybys     = 0;      // Flowthrough
		CmdBuff.DcmdReg.endirqen   = 0;      // 1 means Interrupt when decrement length = 0;
		CmdBuff.DcmdReg.startirqen = 0;      // 1 means Interrupt when the desc is loaded
		CmdBuff.DcmdReg.flowtrg    = 1;      // 1 means the target is an external peripheral
		CmdBuff.DcmdReg.flowsrc    = 0;      // 1 means the source is an external peripheral (and needs flow control)
		CmdBuff.DcmdReg.inctrgadd  = 0;      // 1 means increment the target address (since it's memory)
		CmdBuff.DcmdReg.incsrcadd  = 1;      // 1 means increment the source address (since it's a peripheral)

		descPt = pHC->rw_desc;
		descPt->ddadr = (UINT32)(pHC->rw_desc_phys_addr + 1);
		descPt->dsadr = (UINT32) (pHC->phys_addr_rw);
		descPt->dtadr = (UINT32)(&(phySSPBase->base.ssdr));
		descPt->dcmd  = CmdBuff.DcmdDword;                     // size and cmd values of the RcvA buffer

	}
#endif ///(USE_DMA == 1)
	memset(pHC->iorw, 0xff, sizeof(PXA_SSP_IODATA_SIZE));

	return result;
errFuncRet:
	return result;
}

VOID	dma_deinit(PSSP_HARDWARE_CONTEXT	pDC)
{
	PSSP_HARDWARE_CONTEXT	pHC = (PSSP_HARDWARE_CONTEXT)pDC;
	PHYSICAL_ADDRESS	PA = {0};

	CloseHandle(pHC->DMAParam[RDDMA_PARAM].dmaWaitObj);
	CloseHandle(pHC->DMAParam[WTDMA_PARAM].dmaWaitObj);
	
    	if(pHC->iodata != NULL)
	{
		HalFreeCommonBuffer(NULL,PXA_SSP_IODATA_SIZE, PA, pHC->iodata, FALSE);
	}
	if(pHC->iorw != NULL)
	{
		HalFreeCommonBuffer(NULL,PXA_SSP_IODATA_SIZE, PA, pHC->iorw, FALSE);
	}
	return;
}


///
/// ssp_init_hw: Initialize the H/W
/// Input: 
///		pHC - Hard context
///	Output:
///		None
///	Return:
///		None
void ssp_init_hw(PSSP_HARDWARE_CONTEXT	pHC)
{
	PHYSICAL_ADDRESS	Bulverde_GPIO_Base = {BULVERDE_BASE_REG_PA_GPIO};
	PHYSICAL_ADDRESS	Bulverde_SSP_Base = {SSPREG_PHY_BASE};
	PHYSICAL_ADDRESS	Bulverde_CLKMGR_Base = {BULVERDE_BASE_REG_PA_CLKMGR};
	PHYSICAL_ADDRESS	Bulverde_DMA_Base = {BULVERDE_BASE_REG_PA_DMAC};
	PHYSICAL_ADDRESS	Bulverde_PA_OTS_Base = {BULVERDE_BASE_REG_PA_OST};
	PHYSICAL_ADDRESS	Bulverde_ICR_Base = {BULVERDE_BASE_REG_PA_INTC};


	pHC->pGPIORegs = (BULVERDE_GPIO_REG*)MmMapIoSpace(Bulverde_GPIO_Base, sizeof(BULVERDE_GPIO_REG), FALSE);
	if (!pHC->pGPIORegs) {
		GSPIMSG(ERRMSG, (TEXT("Error in allocating GPIO register\n")));
		goto funcFinal;
	}
	
	pHC->pSSPRegs = (BULVERDE_SSP_EXT_REG*)MmMapIoSpace(Bulverde_SSP_Base, sizeof(BULVERDE_SSP_EXT_REG), FALSE);
	if (!pHC->pSSPRegs) {
		GSPIMSG(ERRMSG, (TEXT("Error in allocating SSP register\n")));
		goto funcFinal;
	}
	
	pHC->pCLKRegs = (BULVERDE_CLKMGR_REG*)MmMapIoSpace(Bulverde_CLKMGR_Base, sizeof(BULVERDE_CLKMGR_REG), FALSE);
	if (!pHC->pCLKRegs) {
		GSPIMSG(ERRMSG, (TEXT("Error in allocating CLK register\n")));
		goto funcFinal;
	}

	pHC->pDMARegs = (BULVERDE_DMA_REG*)MmMapIoSpace(Bulverde_DMA_Base, sizeof(BULVERDE_DMA_REG), FALSE);
	if (!pHC->pDMARegs) {
		GSPIMSG(ERRMSG, (TEXT("Error in allocating DMA register\n")));
		goto funcFinal;
	}

	pHC->pOSTRegs = (BULVERDE_OST_REG*)MmMapIoSpace(Bulverde_PA_OTS_Base, sizeof(BULVERDE_OST_REG), FALSE);
	if (!pHC->pOSTRegs) {
		GSPIMSG(ERRMSG, (TEXT("Error in allocating OST register\n")));
		goto funcFinal;
	}

	///
	///Configure the GPIO 
	///
	set_GPIO_mode(pHC->pGPIORegs, SSP_SCLK|SSPSCLK_ATTR);				///SCLK
	set_GPIO_mode(pHC->pGPIORegs, SSP_SFRM|SSPSFRM_ATTR);				///SFRM

	set_GPIO_mode(pHC->pGPIORegs, SSP_RST|SSPRESET_ATTR);
	set_GPIO_mode(pHC->pGPIORegs, SSP_TX|SSPTX_ATTR);					///TX
	set_GPIO_mode(pHC->pGPIORegs, SSP_RX|SSPRX_ATTR);					///RX
#ifdef USE_TEST_PIN
	set_GPIO_mode(pHC->pGPIORegs, SSP_TST1|SSPTST1_ATTR);
	set_GPIO_mode(pHC->pGPIORegs, SSP_TST2|SSPTST2_ATTR);
#endif
	set_GPIO_signal(pHC->pGPIORegs, SSP_SFRM, SIG_UP); 
     
	set_GPIO_signal(pHC->pGPIORegs, SSP_RST, SIG_UP); 
     
     
	pHC->pSSPRegs->base.sscr0 = 0;
	pHC->pSSPRegs->base.sscr1 = 0;

	Sleep(0);        //JKU
	///
	/// Configure the SSP CLK
	///
#if (SSPCTRLER == 1)					///Using SSP controller1
	pHC->pCLKRegs->cken |= (1<<23);
#elif (SSPCTRLER == 2)					///Using SSP controller2
	pHC->pCLKRegs->cken |= (1<<3);
#elif (SSPCTRLER == 3)					///Using SSP controller3
	pHC->pCLKRegs->cken |= (1<<4);
#endif ///SSPCTRLER

	pHC->pSSPRegs->base.sscr0 = SSCR0_SCR(clkdiv) | SSCR0_DSS(0x000f) | SSCR0_FRF(3);
	pHC->pSSPRegs->base.sscr1 = SSCR1_TTELP | SSCR1_TTE | SSCR1_TSRE | SSCR1_RSRE |
			SSCR1_RFT(0x1) | SSCR1_TFT(0x1) | SSCR1_TRAIL;


	pHC->pSSPRegs->sspsp = SSPSP_SCMODE(0);
	pHC->pSSPRegs->ssto = 1;
	pHC->pSSPRegs->base.sscr0 |= SSCR0_SSE;

	intr_init(pHC);
	dma_init(pHC);

funcFinal:
	return;
}


void	ssp_deinit_hw(PSSP_HARDWARE_CONTEXT	pDC)
{
	PSSP_HARDWARE_CONTEXT	pHC = (PSSP_HARDWARE_CONTEXT)pDC;

//	if (pHC->hIntrHandle == NULL) {
//		SetEvent(pHC->hIntrHandle);
//		pHC->hIntrHandle = NULL;
//	}

	dma_deinit(pHC);
	intr_deinit(pHC);
	
	if(pHC->pGPIORegs != NULL)
	{
		MmUnmapIoSpace((IN PVOID)pHC->pGPIORegs, sizeof(BULVERDE_GPIO_REG));
	}
	if(pHC->pSSPRegs != NULL)
	{
		MmUnmapIoSpace((IN PVOID)pHC->pSSPRegs, sizeof(BULVERDE_SSP_EXT_REG));
	}
	if(pHC->pCLKRegs != NULL)
	{
		MmUnmapIoSpace((IN PVOID)pHC->pCLKRegs, sizeof(BULVERDE_CLKMGR_REG));
	}
	if(pHC->pDMARegs != NULL)
	{
		MmUnmapIoSpace((IN PVOID)pHC->pDMARegs, sizeof(BULVERDE_DMA_REG));
	}
	if(pHC->pOSTRegs != NULL)
	{
		MmUnmapIoSpace((IN PVOID)pHC->pOSTRegs, sizeof(BULVERDE_OST_REG));
	}

	return;

}

DWORD pxa_gspi_register_isr(PVOID ssphc, void* Adapter, ISRFUNC isrFunc)
{
	PSSP_HARDWARE_CONTEXT	pHC = (PSSP_HARDWARE_CONTEXT)ssphc;
	DWORD					result = -1;
	if ((pHC == NULL) || (Adapter == NULL) || (isrFunc == NULL)) {
		goto funcFinal;
	}
	pHC->isrContext = (HANDLE) Adapter;
	pHC->isrFunc = isrFunc;
	result = 0;

funcFinal:
	return result;
}

///////////////////////////////////////////////////////////////////////////////
///	SSP_Init - the init entry point
/// Input: 
///		dwContext - the context for this init 
///	Output:
///	Return: instance context
///		- Returns a DWORD which will be passed to Open & Deinit or NULL if
///          unable to initialize the device
///////////////////////////////////////////////////////////////////////////////
PVOID pxa_gspi_Init(void)
{
	PSSP_HARDWARE_CONTEXT	pHC = NULL;
	ENTERFUNC();
#if (USE_DMA == 1)
	GSPIMSG(1, (TEXT("GSPX - Using DMA mode\n")));
#else
	GSPIMSG(1, (TEXT("GSPX - Using CPU mode\n\n")));
#endif ///USE_DMA
	pHC = LocalAlloc(LPTR, sizeof(SSP_HARDWARE_CONTEXT));

	if (pHC == NULL) {
		GSPIMSG(ERRMSG, (TEXT("Allocate SSP_HARDWARE_CONTEXT FAILED")));
		goto funcFinal;
	}
#ifdef USE_TEST_PIN
	pLocalHC =pHC;
#endif
	///Initialize the member of SSP_HARDWARE_CONTEXT
	InitializeCriticalSection(&(pHC->SSPCrit));


	ssp_init_hw(pHC);
	gspx_power_up(pHC);
	gspx_reset_module(pHC);

	if(!(pHC->waitqueue = CreateEvent( NULL, FALSE, FALSE,NULL))) {
        GSPIMSG(ERRMSG, (TEXT("Init CreateEvent FAILED")));
        goto funcFinal;
    }

	///crlo:verion-check ++
	///GSPI8385: (0004, 0013)
	///GSPI8686: (000b, 0010)
	{
		WORD	regval;
#if defined (GSPI8385)
		const WORD	chipid = 0x0004;
#elif defined (GSPI8686)
		const WORD	chipid = 0x000b;
#else
		const WORD	chipid = 0x000;
#endif ///GSPI$(CHIPID)
		ssp_read_register((PVOID)pHC, &regval, 0x02);
		GSPIMSG(1, (TEXT("Reg(0x02)= 0x%04x\r\n"), regval));

		///================================================
		if (chipid != regval){
			GSPIMSG(1, (TEXT("Chip(exp, val)= (%04xh), %04xh)\n"), chipid, regval));
			gspx_deinit(pHC);
			pHC = NULL;
			goto funcFinal;
		}
	}
	///crlo:verion-check --

	pHC->DriverShutdown = FALSE;
	///Testing....

funcFinal:
	GSPIMSG(PROGFLOW, (TEXT("SSP: %s returning 0x%x\r\n"), TEXT(__FUNCTION__), pHC));
	return pHC;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人综合视频| 成人欧美一区二区三区在线播放| 国产美女一区二区三区| 国产精品灌醉下药二区| 久久这里只有精品6| 精品国免费一区二区三区| 欧美一区二区三区思思人| 欧美高清视频一二三区| 欧美一区二区免费观在线| 国产日本一区二区| 成人欧美一区二区三区小说| 精品亚洲成av人在线观看| 久久成人麻豆午夜电影| 国产精品一卡二| 99re热这里只有精品视频| 一本久道中文字幕精品亚洲嫩| 在线观看视频一区二区欧美日韩| 欧美日韩一区国产| 欧美三级资源在线| 亚洲免费大片在线观看| 爽爽淫人综合网网站| 久久精品国产亚洲5555| 欧美日韩1区2区| 国产午夜精品理论片a级大结局| 国产精品久久久久久久久免费樱桃| 蜜臀av一区二区在线免费观看| 国产馆精品极品| 在线精品视频一区二区| 亚洲免费观看高清| 一本在线高清不卡dvd| 亚洲欧美激情插| 91在线观看高清| 欧美高清dvd| 亚洲va欧美va国产va天堂影院| 91久久国产最好的精华液| 日韩免费观看2025年上映的电影| 中文字幕免费不卡| 视频在线观看一区| 欧美精品在线视频| 青青草国产成人av片免费| 成人免费高清在线| 91精品国产综合久久蜜臀| 中文字幕二三区不卡| 丁香一区二区三区| 日韩精品在线一区二区| 久国产精品韩国三级视频| 亚洲精品在线观看视频| 国产成人亚洲综合色影视| 国产精品久久久久影院亚瑟| 成人精品电影在线观看| 精品国产一区二区三区不卡| 国产二区国产一区在线观看| 久久久久久久久岛国免费| 亚洲无线码一区二区三区| 国产毛片精品一区| 国产精品理伦片| 欧美私人免费视频| 亚洲免费资源在线播放| 欧美日韩和欧美的一区二区| 美女在线一区二区| 中文字幕的久久| 欧美性受xxxx| 国产露脸91国语对白| 亚洲人成在线观看一区二区| 欧美三区在线视频| 国产一区二区不卡| 亚洲福利视频一区二区| 久久人人爽爽爽人久久久| 色综合天天综合网天天狠天天| 中文成人综合网| 国产一二精品视频| 亚洲欧美日韩系列| 精品欧美一区二区久久| 国产一区二区中文字幕| 综合网在线视频| 欧洲国内综合视频| 经典一区二区三区| 亚洲五月六月丁香激情| 国产婷婷精品av在线| 678五月天丁香亚洲综合网| 丁香激情综合国产| 裸体健美xxxx欧美裸体表演| 亚洲精品视频一区| 欧美日韩一级片在线观看| 丁香网亚洲国际| 美女在线视频一区| 午夜精品久久久久| 精品理论电影在线观看 | 亚洲福利视频一区| 久久久一区二区三区| 欧美人妇做爰xxxⅹ性高电影 | 精品一区二区国语对白| 亚洲一区日韩精品中文字幕| 一本一道波多野结衣一区二区| 国产在线精品一区二区夜色| 26uuu精品一区二区在线观看| 日本精品视频一区二区| 成人免费看片app下载| 看国产成人h片视频| 午夜精品福利视频网站| 一区二区三区在线不卡| 日韩三级中文字幕| 国v精品久久久网| 激情综合网天天干| 另类综合日韩欧美亚洲| 亚洲国产成人高清精品| 亚洲猫色日本管| 亚洲欧美激情在线| 综合色天天鬼久久鬼色| 亚洲欧美日韩电影| 中文字幕视频一区| 亚洲日本乱码在线观看| 国产喷白浆一区二区三区| 久久综合色之久久综合| 26uuu精品一区二区| 久久久久久电影| 精品精品欲导航| 精品福利av导航| 久久夜色精品国产欧美乱极品| 日韩精品一区国产麻豆| 精品裸体舞一区二区三区| 欧美变态凌虐bdsm| 精品国内片67194| 欧美精彩视频一区二区三区| 国产日韩欧美综合在线| 国产精品久久久久桃色tv| 国产精品久久久一区麻豆最新章节| 国产精品黄色在线观看| 亚洲人成在线观看一区二区| 亚洲chinese男男1069| 日本欧美一区二区在线观看| 国产精品私房写真福利视频| 国产精品久久久久久久久动漫 | 色视频成人在线观看免| 日本韩国一区二区三区视频| 欧美女孩性生活视频| 欧美放荡的少妇| 久久综合九色综合97婷婷女人 | 99精品国产99久久久久久白柏| 色婷婷久久久久swag精品 | 日本在线不卡视频一二三区| 久久电影国产免费久久电影| 高清在线不卡av| 欧美午夜精品久久久久久孕妇 | 加勒比av一区二区| 成人黄色电影在线 | 色综合久久综合中文综合网| 欧美三片在线视频观看| 久久夜色精品一区| aa级大片欧美| 国产欧美日韩另类视频免费观看| 亚洲欧美日韩国产手机在线| 亚洲国产成人在线| 亚洲大型综合色站| 国产精品一二三区| 欧美亚洲尤物久久| 欧美成人一区二区三区在线观看| 欧美日韩在线播放一区| 欧美伦理影视网| 欧美激情一区二区在线| 亚洲综合色在线| 国产呦萝稀缺另类资源| 日本国产一区二区| 欧美精品一区二区不卡| 午夜精品福利在线| 色悠悠久久综合| 国产精品久久久久久久久晋中| 视频一区在线播放| 欧美大片免费久久精品三p | 狠狠色综合日日| 欧美精品久久久久久久久老牛影院| 欧美大胆人体bbbb| 日韩国产精品大片| 日韩精品一区二区三区中文不卡 | 国产激情视频一区二区在线观看| 日韩午夜在线影院| 亚洲国产精品一区二区www| 蜜桃视频在线一区| 欧美电影影音先锋| 亚洲成av人片在www色猫咪| 高潮精品一区videoshd| 日产国产欧美视频一区精品| 美女视频第一区二区三区免费观看网站 | 国产精品福利一区二区| 久久91精品国产91久久小草| 6080国产精品一区二区| 亚洲韩国精品一区| 色婷婷av一区二区| 亚洲精品一二三四区| 99久久精品99国产精品 | av成人免费在线观看| 久久精品亚洲麻豆av一区二区| 日韩av在线播放中文字幕| 91麻豆免费视频| 精品国产青草久久久久福利| 日韩av一区二区三区四区| 欧美女孩性生活视频| 天堂成人免费av电影一区| 欧美日韩一区小说| 亚洲bt欧美bt精品|