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

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

?? sndsend.c

?? 4510b的vxworks的BSP
?? C
?? 第 1 頁 / 共 4 頁
字號(hào):
* This routine removes a multicast address from whatever the driver
* is listening for.  It then resets the address filter.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS sndsEndMCastDel
    (
    END_DEVICE* pDrvCtrl,	/* device pointer */
    char* pAddress		/* address to be deleted */
    )
    {
    int error;

    if ((error = etherMultiDel (&pDrvCtrl->end.multiList,
	     (char *)pAddress)) == ENETRESET)
	    sndsEndConfig (pDrvCtrl);

    return (OK);
    }

/*****************************************************************************
*
* sndsEndMCastGet - get the multicast address list for the device
*
* This routine gets the multicast list of whatever the driver
* is already listening for.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS sndsEndMCastGet
    (
    END_DEVICE* pDrvCtrl,	/* device pointer */
    MULTI_TABLE* pTable		/* address table to be filled in */
    )
    {
    int error;

    error = etherMultiGet (&pDrvCtrl->end.multiList, pTable);

    return (error);
    }

/*******************************************************************************
*
* sndsEndStop - stop the device
*
* This function calls BSP functions to disconnect interrupts and stop
* the device from operating in interrupt mode.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS sndsEndStop
    (
    END_DEVICE *pDrvCtrl	/* device to be stopped */
    )
    {
    STATUS result = OK;
	BDMARXCON bdmaRxCon;
	BDMATXCON bdmaTxCon;
	MACCON macCon;
	MACRXCON macRxCon;
	MACTXCON macTxCon;


	*(UINT32 *)(&macRxCon) = *(UINT32 *)SNDS_MACRXCON;
	macRxCon.macRxCon_reg.receiveEnable = 0;
	*(UINT32 *)SNDS_MACRXCON = macRxCon.macRxCon_resetval;

	macTxCon.macTxCon_resetval = *(UINT32 *)SNDS_MACTXCON;
	macTxCon.macTxCon_reg.transmitEnable = 0;
	*(UINT32 *)SNDS_MACTXCON = macTxCon.macTxCon_resetval;


/* this is orignal code. changed by jwchoi 2000.6.5.
	*(UINT32 *)(&bdmaRxCon) = *(UINT32 *)SNDS_BDMARXCON;
	bdmaRxCon.rxCon_reg.enable = 0;
	*(UINT32 *)SNDS_BDMARXCON = *(UINT32 *)(&bdmaRxCon);

	*(UINT32 *)(&bdmaTxCon) = *(UINT32 *)SNDS_BDMATXCON;
	bdmaTxCon.txCon_reg.enable = 0;
	*(UINT32 *)SNDS_BDMATXCON = *(UINT32 *)(&bdmaTxCon);
*/
	*(UINT32 *)(&macCon) = *(UINT32 *)SNDS_MACCON;
	macCon.macCon_reg.haltImm  = 1;
	*(UINT32 *)SNDS_MACCON = *(UINT32 *)(&macCon);

	intDisable (pDrvCtrl->ivecBdmaTx);
	intDisable (pDrvCtrl->ivecBdmaRx);
	intDisable (pDrvCtrl->ivecMacTx);
	intDisable (pDrvCtrl->ivecMacRx);

	END_FLAGS_CLR (&pDrvCtrl->end, IFF_UP | IFF_RUNNING);

    return (result);
    }

/******************************************************************************
*
* sndsEndUnload - unload a driver from the system
*
* This function first brings down the device, and then frees any
* stuff that was allocated by the driver in the load function.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS sndsEndUnload
    (
    END_DEVICE* pDrvCtrl	/* device to be unloaded */
    )
    {
    END_OBJECT_UNLOAD (&pDrvCtrl->end);   /*this call will indicate */
										  /* protocol that the device will be unloaded */

    /* TODO - Free any shared DMA memory */

	sndsEndStop(pDrvCtrl);   	/*before unloading the device will stop functioning*/
	sndsEndReset(pDrvCtrl);		/*then it will reset the registers in order to clear any pending interrupts */
	if (pDrvCtrl->fdInitialized)
		sndsEndFdFree(pDrvCtrl);
	if (pDrvCtrl->end.pNetPool)
		{
		netPoolDelete (pDrvCtrl->end.pNetPool);
		free (pDrvCtrl->end.pNetPool);
		pDrvCtrl->end.pNetPool = (NET_POOL_ID)0;
		}

	if (endClDescTbl[0].memArea)
		{
		free (endClDescTbl[0].memArea);
		endClDescTbl[0].memArea = (char *)0;
		}

	if (endMclConfig.memArea)
		{
		free (endMclConfig.memArea);
		endMclConfig.memArea = (char *)0;
		}

	if (pDrvCtrl)
		{
		free (pDrvCtrl);
		(END_DEVICE *)pDrvCtrl = 0;
		}
    return (OK);
    }

/******************************************************************************
* sndsEndReset - Reset the device
* This function resets the driver after initializing from sndsEndLoad
*/

LOCAL void	sndsEndReset
    (
    END_DEVICE* pDrvCtrl	/* device to be reset */
    )
	{
	BDMARXCON bdmaRxCon;
	BDMATXCON bdmaTxCon;
	BDMARXLSZ bdmaRxLsz;
	MACCON macCon;

	if(pDrvCtrl->unit != 0)
		return;

	*(UINT32 *) (&bdmaRxCon) = 0;
	*(UINT32 *) (&bdmaTxCon) = 0;
	*(UINT32 *) (&bdmaRxLsz) = 0;
	*(UINT32 *) (&macCon) = 0;

	if (pDrvCtrl->autoNeg == 1) /* auto negotiation enabled? */
		sndsEndPhyWrite (PHY_CONTROL_REG, PHY_ADDR, _AUTO_NEGOTIATE);
	else if (pDrvCtrl->netSpeed == 10)
		sndsEndPhyWrite (PHY_CONTROL_REG, PHY_ADDR, _10_MB_HDX);
	else if (pDrvCtrl->netSpeed == 100)
		{
		if (pDrvCtrl->duplexMode == 1)	/* FDX */
			sndsEndPhyWrite (PHY_CONTROL_REG, PHY_ADDR, _100_MB_FDX);
		else
			sndsEndPhyWrite (PHY_CONTROL_REG, PHY_ADDR, _100_MB_HDX);
		}
	bdmaRxCon.rxCon_reg.reset = 1;
	*(UINT32 *)SNDS_BDMARXCON = bdmaRxCon.rxCon_resetval;
	bdmaTxCon.txCon_reg.reset = 1;
	*(UINT32 *)SNDS_BDMATXCON = bdmaTxCon.txCon_resetval;
	bdmaRxLsz.rxLsz_reg.bdmaRxMaxSize = END_BUFSIZ;
	*(UINT32 *)SNDS_BDMARXLSZ = bdmaRxLsz.rxLsz_resetval;
	macCon.macCon_reg.swReset = 1;
	*(UINT32 *)SNDS_MACCON = macCon.macCon_resetval;
	return;
	}

/******************************************************************************
* sndsEndPhyRead - Read PHY device
* This function is used to read a byte from the PHY device
*/
LOCAL UINT32 sndsEndPhyRead
	(
	UINT32 phyRegAddr, 	/* Address of PHY register to be read */
	UINT32 phyAddr		/* Address of the PHY chip (usually 0 for single PHY) */
	)
	{
	UINT32 phyData;
	STACON staCon;

	*(UINT32 *) (&staCon) = 0;
	staCon.staCon_reg.phyRegisterAddr = phyRegAddr;
	staCon.staCon_reg.phyAddr = phyAddr;
	staCon.staCon_reg.busy = 1;
	*(UINT32 *)SNDS_STACON = staCon.staCon_resetval;

	while (*(UINT32 *)SNDS_STACON & 0x800)	/***** Busy bit ***/
		;	/* Wait till busy bit is clear */
	phyData = *(UINT32 *)(SNDS_STADATA);
	return (phyData);
	}

/******************************************************************************
* sndsEndPhyWrite	- Wrire into PHY device
* This function is used to write a byte to the PHY device
*/
LOCAL void sndsEndPhyWrite
	(
	UINT32 phyRegAddr, 	/* Address of PHY register to be written */
	UINT32 phyAddr,		/* Address of the PHY chip (usually 0 for single PHY) */
	UINT32 phyData		/* Data to be written */
	)
	{
	STACON staCon;
	UINT32 count = 1000;

	*(UINT32 *)(SNDS_STADATA) = phyData;
	*(UINT32 *) (&staCon) = 0;
	staCon.staCon_reg.phyRegisterAddr = phyRegAddr;
	staCon.staCon_reg.phyAddr = phyAddr;
	staCon.staCon_reg.busy = 1;
	staCon.staCon_reg.write = 1;
	*(UINT32 *)SNDS_STACON = staCon.staCon_resetval;

	while (*(UINT32 *)SNDS_STACON & 0x800)	/***** Busy bit ******/
		;	/* Wait till busy bit is clear */
	while (count--)
		;	/* Dummy delay after PHY write */
	}


/******************************************************************************
* sndsEndMacIntialize - Initialize MAC/BDMA registers
* Initialize the MAC and BDMA registers to make the Ethernet interface functional
*/
LOCAL void sndsEndMacInitialize
	(
	END_DEVICE *pDevice	/* Device that has to be initialized */
	)
	{
	BDMARXCON bdmaRxCon;
	BDMATXCON bdmaTxCon;
	MACCON macCon;
	CAMCON camCon;
	MACTXCON macTxCon;
	MACRXCON macRxCon;
	CAMEN camEn;
	UINT32 count;
	UCHAR *pAddr;

	/* init MACCON register */
	*(UINT32 *)(&macCon) = 0;
	if ((pDevice->autoNeg == 0) && (pDevice->duplexMode == 1))
		macCon.macCon_reg.fullDup = 1;
	*(UINT32 *)SNDS_MACCON = macCon.macCon_resetval;

	/* init BDMA TXRX PTR registers */
	*(UINT32 *)(SNDS_BDMARXPTR) = *(UINT32 *) (&gpReceiveFrameDescStart);
	*(UINT32 *)(SNDS_BDMATXPTR) = *(UINT32 *) (&gpTransmitFrameDescStart);	/* Initialize the register */
	
	/* Copy our MAC address to the first location in address array */
	pAddr = (UCHAR *)(&(pDevice->addrList[0]));
	*(UINT32 *)pAddr = htonl (*(UINT32 *)pDevice->enetAddr);
	pAddr += 6;
	*(UINT16 *)pAddr = htons (*(UINT16 *)(pDevice->enetAddr+4));

	/* Copy the address array into CAM registers */
	for (count = 0; count < 32; count++)
		*(((UINT32 *)SNDS_CAM_BASE) + count) = pDevice->addrList[count];

	/* init CAMCON register */
	*(UINT32 *) (&camCon) = 0;
	if (END_FLAGS_GET(&pDevice->end) & IFF_PROMISC)
		camCon.camCon_reg.stationAccept = 1;
	camCon.camCon_reg.broadcastAccept = 1;
	camCon.camCon_reg.cmpEnable = 1;
	*(UINT32 *)SNDS_CAMCON = camCon.camCon_resetval;

	/* init CAMEN register.  Set bits for our MAC address and all
	 * multicast addresses
	 */
	*(UINT32 *)(&camEn) = 0;
	for (count = 0; count <= pDevice->mcastAddrCount; count++)
		camEn.camen_reg.camEnable |= (0x1<<count);
	*(UINT32 *)SNDS_CAMEN = camEn.camen_resetval;

	/* init BDMARXCON register */
	*(UINT32 *) (&bdmaRxCon) = 0;
	bdmaRxCon.rxCon_reg.burstSize = 31;
	bdmaRxCon.rxCon_reg.stop_skipFrame = 1;
	bdmaRxCon.rxCon_reg.memAddrsInc_Dec = 1;
	bdmaRxCon.rxCon_reg.big_LittleEndian = 1;
	bdmaRxCon.rxCon_reg.wordAlign = 2;	
	bdmaRxCon.rxCon_reg.reset = 0;
	*(UINT32 *)SNDS_BDMARXCON = bdmaRxCon.rxCon_resetval;


	/* init MACRXCON register */
	*(UINT32 *)(&macRxCon) = 0;
	macRxCon.macRxCon_reg.stripCRCVal = 1;
	*(UINT32 *)SNDS_MACRXCON = macRxCon.macRxCon_resetval;

	/* init BDMATXCON register */
	*(UINT32 *)(&bdmaTxCon) = 0;
	bdmaTxCon.txCon_reg.burstSize = 15;
	bdmaTxCon.txCon_reg.stop_skipFrame = 1;
	bdmaTxCon.txCon_reg.macTxStartLevel = 6;	/* 110 */
	*(UINT32 *)SNDS_BDMATXCON = bdmaTxCon.txCon_resetval;

	/* init MACTXCON register */
	*(UINT32 *)(&macTxCon) = 0;
	if ((pDevice->flags & LS_POLLING) == 0)	/* Not polling mode */
		macTxCon.macTxCon_reg.enableCompletion = 1;
	*(UINT32 *)SNDS_MACTXCON = macTxCon.macTxCon_resetval;

	return;
	}


/**********************************************************************************
*    sndsEndFdInitialize - Initialize TX and RX FD lists
*    Make a circular list of Rx and TX frame descriptors and buffers.
*    Two global variables gpReceiveFrameDescStart and gpTransmitFrameDescStart 
*    stores the pointer to the start of the list.  BDMA TX/RX PTR registers are 
*    also initialized with the start of the appropriate list.
*/

LOCAL STATUS sndsEndFdInitialize
    (
    END_DEVICE* pDrvCtrl	/* device to be initialized */
    )
	{

    int count;

    RECEIVE_FRAME_DESC* 	pReceiveFrameDesc;
    TRANSMIT_FRAME_DESC* 	pTransmitFrameDesc;
    RECEIVE_FRAME_DESC* 	pPrevReceiveFrameDesc  = 0;
    TRANSMIT_FRAME_DESC* 	pPrevTransmitFrameDesc = 0;
	char *pNewCluster;
    
	for(count = 0; count < RX_FD_NUM; count++)
		{
		if ((pReceiveFrameDesc = (RECEIVE_FRAME_DESC *)calloc(sizeof(RECEIVE_FRAME_DESC), 1)) == NULL)
			return ERROR;
		(UINT32)pReceiveFrameDesc += NON_CACHE_REGION;
	    pNewCluster = netClusterGet (pDrvCtrl->end.pNetPool, pDrvCtrl->end.pNetPool->clTbl[0]);
	    if (pNewCluster == NULL)
	        {
				return ERROR;
	        }
		(UINT32)pNewCluster |= NON_CACHE_REGION;
		(pReceiveFrameDesc->rxFrameData).frameDataPtr = (UINT32)pNewCluster;
		
		(pReceiveFrameDesc->rxFrameData).o_bit = 1;
		*(UINT32 *) (&pReceiveFrameDesc->rxStatusLength) = 0;
		pReceiveFrameDesc->nextRxFrameDesc = NULL;

		if (count == 0)
			{
			gpReceiveFrameDescStart = pReceiveFrameDesc;
			*(UINT32 *)(SNDS_BDMARXPTR) = *(UINT32 *) (&pReceiveFrameDesc);	/* Initialize the register */
			}
		else
			{
			pPrevReceiveFrameDesc->nextRxFrameDesc = pReceiveFrameDesc;
			}
		if (count == (RX_FD_NUM - 1))
			{
			pReceiveFrameDesc->nextRxFrameDesc = gpReceiveFrameDescStart;
			}
		pPrevReceiveFrameDesc = pReceiveFrameDesc;
		}/* end of for loop*/

	for(count = 0; count < TX_FD_NUM; count++)
		{
		if ((pTransmitFrameDesc = (TRANSMIT_FRAME_DESC *)calloc(sizeof(TRANSMIT_FRAME_DESC), 1)) == NULL)
			return ERROR;
		(UINT32)pTransmitFrameDesc += NON_CACHE_REGION;
		(pTransmitFrameDesc->txFrameData).frameDataPtr = (UINT32)calloc (END_BUFSIZ, 1);
		(pTransmitFrameDesc->txFrameData).frameDataPtr |= NON_CACHE_REGION;
		(pTransmitFrameDesc->txFrameData).o_bit = 0;
		*(UINT32 *) (&pTransmitFrameDesc->txControl) = 0;
		pTransmitFrameDesc->nextTxFrameDesc = NULL;
		if (count == 0)
			{
			gpTransmitFrameDescStart = pTransmitFrameDesc;
			*(UINT32 *)(SNDS_BDMATXPTR) = *(UINT32 *) (&pTransmitFrameDesc);	/* Initialize the register */
			}
		else
			{
			pPrevTransmitFrameDesc->nextTxFrameDesc = pTransmitFrameDesc;
			}
		if (count == (TX_FD_NUM - 1))
			{
			pTransmitFrameDesc->nextTxFrameDesc = gpTransmitFrameDescStart;
			}
		pPrevTransmitFrameDesc = pTransmitFrameDesc;
		}/* end of for loop */
	pDrvCtrl->fdInitialized = TRUE;
	return OK;
	}

/******************************************************************************
*	sndsEndFdFree - Free the allocated TX and RX FD lists and buffers
*	This function frees all the allocated TX and RX FDs and the associated
*	buffers
*/

LOCAL void sndsEndFdFree
    (
    END_DEVICE* pDrvCtrl	/* device to be freed */
    )
	{
	RECEIVE_FRAME_DESC *pReceiveFrameDesc;
	TRANSMIT_FRAME_DESC *pTransmitFrameDesc;
	UINT32 count;

	if (pDrvCtrl->fdInitialized == FALSE)
		return;
	for (count = 0; (count < TX_FD_NUM) && gpTransmitFrameDescStart; count++)
		{
		pTransmitFrameDesc = gpTransmitFrameDescStart;
		if (gpTransmitFrameDescStart->txFrameData.frameDataPtr)
			{
			gpTransmitFrameDescStart->txFrameData.frameDataPtr &= ~NON_CACHE_REGION;
			free ((void *)gpTransmitFrameDescStart->txFrameData.frameDataPtr);
			}
		gpTransmitFrameDescStart = gpTransmitFrameDescStart->nextTxFrameDesc;
		(UINT32)pTransmitFrameDesc -= NON_CACHE_REGION;
		free (pTransmitFrameDesc);
		}
	for (count = 0; (count < RX_FD_NUM) && gpReceiveFrameDescStart; count++)
		{
		pReceiveFrameDesc = gpReceiveFrameDescStart;
		if (gpReceiveFrameDescStart->rxFrameData.frameDataPtr)
			{
			gpReceiveFrameDescStart->rxFrameData.frameDataPtr &= ~NON_CACHE_REGION;
			netClFree (pDrvCtrl->end.pNetPool, (char *)gpReceiveFrameDescStart->rxFrameData.frameDataPtr);
			}
		gpReceiveFrameDescStart = gpReceiveFrameDescStart->nextRxFrameDesc;
		(UINT32)pReceiveFrameDesc -= NON_CACHE_REGION;
		free (pReceiveFrameDesc);
		}
	*(UINT32 *)(&gpReceiveFrameDescStart) = *(UINT32 *)(&gpTransmitFrameDescStart) = 0;
	pDrvCtrl->fdInitialized = FALSE;
	}

/******************************************************************************
 * sndsEndBugFix - Bug Fix code for KS32C50100 Ethernet MAC
 * This function checks for the receive bug in Ethernet MAC and corrects the pointer
 * to frame data by skipping the received garbage data.  Refer to KS32C50100 Application
 * notes
 */
LOCAL void sndsEndBugFix (UINT16 *pFrameData)
	{
	UINT16 data1, data2;
	UINT32 frameData;
	UINT32 swapData;

	gBugFixDone = FALSE;
	pFrameData++;	/* Point to start of data (MAC is configured with WordAlign = 2) */

	
	/*
	 * Received data starts at a 2-byte boundary.  So read as 2 16-bit short words
	 * to avoid data abort.
	 */
	data1 = *pFrameData++;
	data2 = *pFrameData;

	frameData = ((UINT32)data2 << 16) | data1;

	swapData = ((frameData << 24) & 0xFF000000) | ((frameData << 8) & 0x00FF0000) |
				((frameData >> 24) & 0x000000FF) | ((frameData >> 8) & 0x0000FF00);
	if (swapData == gStatusLengthPrevious)
		gBugFixDone = TRUE;	/* To bump the offset while sending the frame up */

	return;
	}


#endif 	/* INCLUDE_SNDS_END */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
看国产成人h片视频| 一区二区三区四区在线免费观看 | 色诱视频网站一区| 亚洲欧美另类图片小说| 偷拍亚洲欧洲综合| kk眼镜猥琐国模调教系列一区二区| 欧美激情中文字幕一区二区| 激情五月婷婷综合| 成人精品免费看| 亚洲一区二区视频在线| 欧美成人女星排名| 91丨九色丨黑人外教| 欧美年轻男男videosbes| 日本在线不卡一区| 成人动漫精品一区二区| 337p亚洲精品色噜噜噜| 夜夜精品视频一区二区| 欧美色爱综合网| 美女尤物国产一区| 青青草伊人久久| 国产激情视频一区二区在线观看 | 美女一区二区三区| 日韩免费看的电影| 欧美色精品在线视频| 国产精品久久久久久久久快鸭 | 91精品国产综合久久久久| 亚洲美女电影在线| 一本大道久久a久久综合| 天堂久久久久va久久久久| 麻豆国产欧美一区二区三区| 男人的天堂久久精品| 天天影视色香欲综合网老头| 精品电影一区二区| 亚洲在线视频免费观看| 色就色 综合激情| 在线亚洲免费视频| 高清成人在线观看| 蜜臀av一区二区在线免费观看| 日韩免费观看2025年上映的电影 | 中文字幕国产一区二区| 在线观看日韩电影| 国产在线精品一区二区不卡了 | 一本高清dvd不卡在线观看| 97久久超碰国产精品| 亚洲福利电影网| 色综合中文字幕| 久久久久九九视频| 另类小说图片综合网| 一本色道亚洲精品aⅴ| 色综合色狠狠综合色| 欧美精品一区二区三| 国产麻豆一精品一av一免费| 久久嫩草精品久久久精品一| 欧美成人精品福利| 久久你懂得1024| 国产精品美女一区二区在线观看| 国产日韩欧美在线一区| 国产午夜精品一区二区| 亚洲欧美日韩国产中文在线| 日韩精品中文字幕在线一区| 亚洲欧美经典视频| 欧美日韩和欧美的一区二区| 成人黄色在线网站| 日韩高清不卡一区二区三区| 久久av资源站| 欧美亚洲国产一区在线观看网站| 美国av一区二区| 一本大道综合伊人精品热热| 亚洲欧美另类图片小说| 国产一区二区不卡在线| 麻豆91在线看| 亚洲图片欧美视频| 色网站国产精品| 9色porny自拍视频一区二区| 免费av网站大全久久| 国产日韩成人精品| 国产91精品免费| 亚洲国产精品激情在线观看| 黄页网站大全一区二区| 精品999久久久| 欧美国产一区二区在线观看| 天天影视涩香欲综合网| 91精品国产综合久久精品麻豆| 蜜臀av一级做a爰片久久| 国产精品综合网| 一二三区精品视频| 这里只有精品99re| 精品国产欧美一区二区| 久久精品人人爽人人爽| 欧美日韩一区高清| 欧美三级乱人伦电影| 欧美精品久久天天躁| 伊人性伊人情综合网| 欧美一区二区日韩一区二区| 日韩电影在线一区| 国产精品免费视频网站| 国产校园另类小说区| 亚洲视频资源在线| 久久精品国产77777蜜臀| 91视频在线观看免费| a亚洲天堂av| 国产精品久久久久四虎| 精品久久久久久久久久久久久久久久久 | 国产成人精品网址| 99久久精品99国产精品| 99re8在线精品视频免费播放| 免费欧美日韩国产三级电影| 久久99精品一区二区三区| 亚洲高清视频在线| 精品国产三级a在线观看| 久久久不卡影院| 国产精品丝袜一区| 久久精品水蜜桃av综合天堂| 国内精品视频666| 一级特黄大欧美久久久| 欧美性三三影院| 国产mv日韩mv欧美| 99综合电影在线视频| 亚洲国产精品激情在线观看 | 精品精品欲导航| 久久网这里都是精品| 国产最新精品精品你懂的| 亚洲欧美日韩一区| 日韩精品影音先锋| 亚洲视频你懂的| 国产一区二区伦理片| 国产成人av福利| 亚洲成人午夜电影| 亚洲风情在线资源站| 日本精品裸体写真集在线观看| 国产精品亚洲午夜一区二区三区| 综合自拍亚洲综合图不卡区| 国产调教视频一区| 国产一区二区精品久久99| 国产成人精品影院| 亚洲精品一区二区三区在线观看| 国产一区二区影院| 亚洲精品国产成人久久av盗摄| 日韩美女一区二区三区| 韩国在线一区二区| 午夜久久久久久久久| 韩国av一区二区三区在线观看 | 日韩欧美一区二区在线视频| 韩国v欧美v日本v亚洲v| 欧美变态tickling挠脚心| 欧美日韩小视频| 中文字幕欧美国产| 日韩成人精品在线观看| 777a∨成人精品桃花网| 亚洲精品免费在线播放| 97精品超碰一区二区三区| 亚洲伦理在线精品| 欧美日韩精品一区视频| 日韩电影免费在线观看网站| 精品日产卡一卡二卡麻豆| 国产精品 欧美精品| 国产精品成人免费精品自在线观看 | 国产精品精品国产色婷婷| 91亚洲永久精品| 三级亚洲高清视频| 日韩精品中文字幕在线不卡尤物| 国产精品一二三区在线| 综合色中文字幕| 欧美日韩国产综合久久| 狠狠狠色丁香婷婷综合久久五月| 国产日韩欧美一区二区三区乱码| 99综合影院在线| 日日嗨av一区二区三区四区| 久久夜色精品国产欧美乱极品| 五月婷婷另类国产| k8久久久一区二区三区| 欧美精彩视频一区二区三区| 国产精品一区二区免费不卡| 99久久精品国产一区| 欧美疯狂性受xxxxx喷水图片| 日本电影亚洲天堂一区| 香蕉乱码成人久久天堂爱免费| 欧美一级生活片| 中文字幕巨乱亚洲| 亚洲自拍偷拍麻豆| 欧美性生交片4| 久久先锋影音av鲁色资源网| 国产精品视频一区二区三区不卡| 欧美日韩精品欧美日韩精品| 日韩理论在线观看| 91精品国产综合久久婷婷香蕉 | 日韩成人免费在线| 欧美一区二区三区的| 成人欧美一区二区三区小说| 国产精品一区二区视频| 麻豆国产91在线播放| 国产精品久久一级| 欧美日韩中文另类| 欧美日韩一区二区不卡| 精品国产亚洲一区二区三区在线观看| 午夜视频久久久久久| 亚洲福利一区二区三区| 精品国产露脸精彩对白| 欧美va亚洲va香蕉在线| 国产亚洲女人久久久久毛片|