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

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

?? ixethaccdataplane.c

?? 友善mini2440嵌入式
?? C
?? 第 1 頁 / 共 5 頁
字號:
/** * @file IxEthDataPlane.c * * @author Intel Corporation * @date 12-Feb-2002 * * @brief This file contains the implementation of the IXPxxx * Ethernet Access Data plane component * * Design Notes: * * @par * IXP400 SW Release version 2.0 * * -- Copyright Notice -- * * @par * Copyright 2001-2005, Intel Corporation. * All rights reserved. * * @par * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the Intel Corporation nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * @par * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @par * -- End of Copyright Notice -- */#include "IxNpeMh.h"#include "IxEthAcc.h"#include "IxEthDB.h"#include "IxOsal.h"#include "IxEthDBPortDefs.h"#include "IxFeatureCtrl.h"#include "IxEthAcc_p.h"#include "IxEthAccQueueAssign_p.h"extern PUBLIC IxEthAccMacState ixEthAccMacState[];extern PUBLIC UINT32 ixEthAccNewSrcMask;/** * private functions prototype */PRIVATE IX_OSAL_MBUF *ixEthAccEntryFromQConvert(UINT32 qEntry, UINT32 mask);PRIVATE UINT32ixEthAccMbufRxQPrepare(IX_OSAL_MBUF *mbuf);PRIVATE UINT32ixEthAccMbufTxQPrepare(IX_OSAL_MBUF *mbuf);PRIVATE IxEthAccStatusixEthAccTxSwQHighestPriorityGet(IxEthAccPortId portId,				IxEthAccTxPriority *priorityPtr);PRIVATE IxEthAccStatusixEthAccTxFromSwQ(IxEthAccPortId portId,		  IxEthAccTxPriority priority);PRIVATE IxEthAccStatusixEthAccRxFreeFromSwQ(IxEthAccPortId portId);PRIVATE voidixEthAccMbufFromTxQ(IX_OSAL_MBUF *mbuf);PRIVATE voidixEthAccMbufFromRxQ(IX_OSAL_MBUF *mbuf);PRIVATE IX_STATUSixEthAccQmgrLockTxWrite(IxEthAccPortId portId,			UINT32 qBuffer);PRIVATE IX_STATUSixEthAccQmgrLockRxWrite(IxEthAccPortId portId,			UINT32 qBuffer);PRIVATE IX_STATUSixEthAccQmgrTxWrite(IxEthAccPortId portId,		    UINT32 qBuffer,		    UINT32 priority);/** * @addtogroup IxEthAccPri *@{ *//* increment a counter only when stats are enabled */#define TX_STATS_INC(port,field) \        IX_ETH_ACC_STATS_INC(ixEthAccPortData[port].ixEthAccTxData.stats.field)#define RX_STATS_INC(port,field) \        IX_ETH_ACC_STATS_INC(ixEthAccPortData[port].ixEthAccRxData.stats.field)/* always increment the counter (mainly used for unexpected errors) */#define TX_INC(port,field) \        ixEthAccPortData[port].ixEthAccTxData.stats.field++#define RX_INC(port,field) \        ixEthAccPortData[port].ixEthAccRxData.stats.field++PRIVATE IxEthAccDataPlaneStats     ixEthAccDataStats;extern IxEthAccPortDataInfo   ixEthAccPortData[];extern IxEthAccInfo   ixEthAccDataInfo;PRIVATE IxOsalFastMutex txWriteMutex[IX_ETH_ACC_NUMBER_OF_PORTS];PRIVATE IxOsalFastMutex rxWriteMutex[IX_ETH_ACC_NUMBER_OF_PORTS];/** * * @brief Mbuf header conversion macros : they implement the *  different conversions using a temporary value. They also double-check *  that the parameters can be converted to/from NPE format. * */#if defined(__wince) && !defined(IN_KERNEL)#define PTR_VIRT2NPE(ptrSrc,dst) \  do { UINT32 temp; \      IX_OSAL_ENSURE(sizeof(ptrSrc) == sizeof(UINT32), "Wrong parameter type"); \      IX_OSAL_ENSURE(sizeof(dst) == sizeof(UINT32), "Wrong parameter type"); \      temp = (UINT32)IX_OSAL_MBUF_MBUF_VIRTUAL_TO_PHYSICAL_TRANSLATION((IX_OSAL_MBUF*)ptrSrc); \      (dst) = IX_OSAL_SWAP_BE_SHARED_LONG(temp); } \  while(0)#define PTR_NPE2VIRT(type,src,ptrDst) \  do { void *temp; \      IX_OSAL_ENSURE(sizeof(type) == sizeof(UINT32), "Wrong parameter type"); \      IX_OSAL_ENSURE(sizeof(src) == sizeof(UINT32), "Wrong parameter type"); \      IX_OSAL_ENSURE(sizeof(ptrDst) == sizeof(UINT32), "Wrong parameter type"); \      temp = (void *)IX_OSAL_SWAP_BE_SHARED_LONG(src); \      (ptrDst) = (type)IX_OSAL_MBUF_MBUF_PHYSICAL_TO_VIRTUAL_TRANSLATION(temp); } \  while(0)#else#define PTR_VIRT2NPE(ptrSrc,dst) \  do { UINT32 temp; \      IX_OSAL_ENSURE(sizeof(ptrSrc) == sizeof(UINT32), "Wrong parameter type"); \      IX_OSAL_ENSURE(sizeof(dst) == sizeof(UINT32), "Wrong parameter type"); \      temp = (UINT32)IX_OSAL_MMU_VIRT_TO_PHYS(ptrSrc); \      (dst) = IX_OSAL_SWAP_BE_SHARED_LONG(temp); } \  while(0)#define PTR_NPE2VIRT(type,src,ptrDst) \  do { void *temp; \      IX_OSAL_ENSURE(sizeof(type) == sizeof(UINT32), "Wrong parameter type"); \      IX_OSAL_ENSURE(sizeof(src) == sizeof(UINT32), "Wrong parameter type"); \      IX_OSAL_ENSURE(sizeof(ptrDst) == sizeof(UINT32), "Wrong parameter type"); \      temp = (void *)IX_OSAL_SWAP_BE_SHARED_LONG(src); \      (ptrDst) = (type)IX_OSAL_MMU_PHYS_TO_VIRT(temp); } \  while(0)#endif/** * * @brief Mbuf payload pointer conversion macros : Wince has its own *  method to convert the buffer pointers */#if defined(__wince) && !defined(IN_KERNEL)#define DATAPTR_VIRT2NPE(ptrSrc,dst) \  do { UINT32 temp; \      temp = (UINT32)IX_OSAL_MBUF_DATA_VIRTUAL_TO_PHYSICAL_TRANSLATION(ptrSrc); \      (dst) = IX_OSAL_SWAP_BE_SHARED_LONG(temp); } \  while(0)#else#define DATAPTR_VIRT2NPE(ptrSrc,dst) PTR_VIRT2NPE(IX_OSAL_MBUF_MDATA(ptrSrc),dst)#endif/* Flush the shared part of the mbuf header */#define IX_ETHACC_NE_CACHE_FLUSH(mbufPtr) \  do { \      IX_OSAL_CACHE_FLUSH(IX_ETHACC_NE_SHARED(mbufPtr), \			      sizeof(IxEthAccNe)); \    } \  while(0)/* Invalidate the shared part of the mbuf header */#define IX_ETHACC_NE_CACHE_INVALIDATE(mbufPtr) \  do { \      IX_OSAL_CACHE_INVALIDATE(IX_ETHACC_NE_SHARED(mbufPtr), \				   sizeof(IxEthAccNe)); \    } \  while(0)/* Preload one cache line (shared mbuf headers are aligned * and their size is 1 cache line) * * IX_OSAL_CACHED  is defined when the mbuf headers are * allocated from cached memory. * * Other processor on emulation environment may not implement * preload function */#ifdef IX_OSAL_CACHED	#if (CPU!=SIMSPARCSOLARIS) && !defined (__wince)		#define IX_ACC_DATA_CACHE_PRELOAD(ptr) \		do { /* preload a cache line (Xscale Processor) */ \			__asm__ (" pld [%0]\n": : "r" (ptr)); \		} \		while(0)	#else		/* preload not implemented on different processor */		#define IX_ACC_DATA_CACHE_PRELOAD(mbufPtr) \		do { /* nothing */ } while (0)	#endif#else	/* preload not needed if cache is not enabled */	#define IX_ACC_DATA_CACHE_PRELOAD(mbufPtr) \	do { /* nothing */ } while (0)#endif/** * * @brief function to retrieve the correct pointer from * a queue entry posted by the NPE * * @param qEntry : entry from qmgr queue *        mask : applicable mask for this queue *        (4 most significant bits are used for additional informations) * * @return IX_OSAL_MBUF * pointer to mbuf header * * @internal */PRIVATE IX_OSAL_MBUF *ixEthAccEntryFromQConvert(UINT32 qEntry, UINT32 mask){    IX_OSAL_MBUF *mbufPtr;    if (qEntry != 0)    {        /* mask NPE bits (e.g. priority, port ...) */        qEntry &= mask;#if IX_ACC_DRAM_PHYS_OFFSET != 0        /* restore the original address pointer (if PHYS_OFFSET is not 0) */        qEntry |= (IX_ACC_DRAM_PHYS_OFFSET & ~IX_ETHNPE_QM_Q_RXENET_ADDR_MASK);#endif        /* get the mbuf pointer address from the npe-shared address */        qEntry -= offsetof(IX_OSAL_MBUF,ix_ne);        /* phys2virt mbuf */        mbufPtr = (IX_OSAL_MBUF *)IX_OSAL_MMU_PHYS_TO_VIRT(qEntry);        /* preload the cacheline shared with NPE */        IX_ACC_DATA_CACHE_PRELOAD(IX_ETHACC_NE_SHARED(mbufPtr));        /* preload the cacheline used by xscale */        IX_ACC_DATA_CACHE_PRELOAD(mbufPtr);    }    else    {	mbufPtr = NULL;    }    return mbufPtr;}/* Convert the mbuf header for NPE transmission */PRIVATE UINT32ixEthAccMbufTxQPrepare(IX_OSAL_MBUF *mbuf){    UINT32 qbuf;    UINT32 len;    /* endianess swap for tci and flags       note: this is done only once, even for chained buffers */    IX_ETHACC_NE_FLAGS(mbuf)   = IX_OSAL_SWAP_BE_SHARED_SHORT(IX_ETHACC_NE_FLAGS(mbuf));    IX_ETHACC_NE_VLANTCI(mbuf) = IX_OSAL_SWAP_BE_SHARED_SHORT(IX_ETHACC_NE_VLANTCI(mbuf));    /* test for unchained mbufs */    if (IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR(mbuf) == NULL)    {	/* "best case" scenario : unchained mbufs */	IX_ETH_ACC_STATS_INC(ixEthAccDataStats.unchainedTxMBufs);	/* payload pointer conversion */	DATAPTR_VIRT2NPE(mbuf, IX_ETHACC_NE_DATA(mbuf));	/* unchained mbufs : the frame length is the mbuf length	 * and the 2 identical lengths are stored in the same	 * word.	 */	len = IX_OSAL_MBUF_MLEN(mbuf);	/* set the length in both length and pktLen 16-bits fields */	len |= (len << IX_ETHNPE_ACC_LENGTH_OFFSET);	IX_ETHACC_NE_LEN(mbuf) = IX_OSAL_SWAP_BE_SHARED_LONG(len);	/* unchained mbufs : next contains 0 */	IX_ETHACC_NE_NEXT(mbuf) = 0;	/* flush shared header after all address conversions */	IX_ETHACC_NE_CACHE_FLUSH(mbuf);    }    else    {	/* chained mbufs */	IX_OSAL_MBUF *ptr = mbuf;	IX_OSAL_MBUF *nextPtr;	UINT32 frmLen;	/* get the frame length from the header of the first buffer */	frmLen = IX_OSAL_MBUF_PKT_LEN(mbuf);	do	{	    IX_ETH_ACC_STATS_INC(ixEthAccDataStats.chainedTxMBufs);	    /* payload pointer */	    DATAPTR_VIRT2NPE(ptr,IX_ETHACC_NE_DATA(ptr));	    /* Buffer length and frame length are stored in the same word */	    len = IX_OSAL_MBUF_MLEN(ptr);	    len = frmLen | (len << IX_ETHNPE_ACC_LENGTH_OFFSET);	    IX_ETHACC_NE_LEN(ptr) = IX_OSAL_SWAP_BE_SHARED_LONG(len);	    /* get the virtual next chain pointer */	    nextPtr = IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR(ptr);	    if (nextPtr != NULL)	    {		/* shared pointer of the next buffer is chained */		PTR_VIRT2NPE(IX_ETHACC_NE_SHARED(nextPtr),			     IX_ETHACC_NE_NEXT(ptr));	    }	    else	    {		IX_ETHACC_NE_NEXT(ptr) = 0;	    }	    /* flush shared header after all address conversions */	    IX_ETHACC_NE_CACHE_FLUSH(ptr);	    /* move to next buffer */	    ptr = nextPtr;	    /* the frame length field is set only in the first buffer	     * and is zeroed in the next buffers	     */	    frmLen = 0;	}	while(ptr != NULL);    }    /* virt2phys mbuf itself */    qbuf = (UINT32)IX_OSAL_MMU_VIRT_TO_PHYS(		  IX_ETHACC_NE_SHARED(mbuf));    /* Ensure the bits which are reserved to exchange information with     * the NPE are cleared     *     * If the mbuf address is not correctly aligned, or from an     * incompatible memory range, there is no point to continue     */    IX_OSAL_ENSURE(((qbuf & ~IX_ETHNPE_QM_Q_TXENET_ADDR_MASK) == 0),	      "Invalid address range");    return qbuf;}/* Convert the mbuf header for NPE reception */PRIVATE UINT32ixEthAccMbufRxQPrepare(IX_OSAL_MBUF *mbuf){    UINT32 len;    UINT32 qbuf;    if (IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR(mbuf) == NULL)    {	/* "best case" scenario : unchained mbufs */	IX_ETH_ACC_STATS_INC(ixEthAccDataStats.unchainedRxFreeMBufs);	/* unchained mbufs : payload pointer */	DATAPTR_VIRT2NPE(mbuf, IX_ETHACC_NE_DATA(mbuf));	/* unchained mbufs : set the buffer length	* and the frame length field is zeroed	*/	len = (IX_OSAL_MBUF_MLEN(mbuf) << IX_ETHNPE_ACC_LENGTH_OFFSET);	IX_ETHACC_NE_LEN(mbuf) = IX_OSAL_SWAP_BE_SHARED_LONG(len);	/* unchained mbufs : next pointer is null */	IX_ETHACC_NE_NEXT(mbuf) = 0;	/* flush shared header after all address conversions */	IX_ETHACC_NE_CACHE_FLUSH(mbuf);	/* remove shared header cache line */	IX_ETHACC_NE_CACHE_INVALIDATE(mbuf);    }    else    {	/* chained mbufs */	IX_OSAL_MBUF *ptr = mbuf;	IX_OSAL_MBUF *nextPtr;	do	{	    /* chained mbufs */	    IX_ETH_ACC_STATS_INC(ixEthAccDataStats.chainedRxFreeMBufs);	    /* we must save virtual next chain pointer */	    nextPtr = IX_OSAL_MBUF_NEXT_BUFFER_IN_PKT_PTR(ptr);	    if (nextPtr != NULL)	    {		/* chaining pointer for NPE */		PTR_VIRT2NPE(IX_ETHACC_NE_SHARED(nextPtr),			     IX_ETHACC_NE_NEXT(ptr));	    }	    else	    {		IX_ETHACC_NE_NEXT(ptr) = 0;	    }	    /* payload pointer */	    DATAPTR_VIRT2NPE(ptr,IX_ETHACC_NE_DATA(ptr));	    /* buffer length */	    len = (IX_OSAL_MBUF_MLEN(ptr) << IX_ETHNPE_ACC_LENGTH_OFFSET);	    IX_ETHACC_NE_LEN(ptr) = IX_OSAL_SWAP_BE_SHARED_LONG(len);	    /* flush shared header after all address conversions */	    IX_ETHACC_NE_CACHE_FLUSH(ptr);	    /* remove shared header cache line */	    IX_ETHACC_NE_CACHE_INVALIDATE(ptr);	    /* next mbuf in the chain */	    ptr = nextPtr;	}	while(ptr != NULL);    }    /* virt2phys mbuf itself */    qbuf = (UINT32)IX_OSAL_MMU_VIRT_TO_PHYS(		  IX_ETHACC_NE_SHARED(mbuf));    /* Ensure the bits which are reserved to exchange information with     * the NPE are cleared     *     * If the mbuf address is not correctly aligned, or from an     * incompatible memory range, there is no point to continue     */    IX_OSAL_ENSURE(((qbuf & ~IX_ETHNPE_QM_Q_RXENET_ADDR_MASK) == 0),	      "Invalid address range");    return qbuf;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合成人网| 国产大陆a不卡| 成年人国产精品| 久久久亚洲综合| 精品一区二区三区在线视频| 欧美一卡二卡在线| 日韩国产在线一| 99re6这里只有精品视频在线观看| 在线观看日韩电影| 国产亲近乱来精品视频| 国产一区二区三区不卡在线观看| 欧美性猛片aaaaaaa做受| 亚洲欧美韩国综合色| 99r国产精品| 国产精品久久久久aaaa樱花| 成人爽a毛片一区二区免费| 国产欧美一二三区| 91亚洲国产成人精品一区二三 | 日本大香伊一区二区三区| 中文字幕综合网| 欧美日韩国产精品成人| 亚洲高清视频在线| 久久午夜羞羞影院免费观看| 成人综合在线观看| 亚洲婷婷综合久久一本伊一区| 欧美乱妇15p| 国产精品一区二区黑丝| 久久精品欧美一区二区三区不卡 | 欧美视频一区在线| 国产成人综合在线观看| 中文字幕一区不卡| 欧美一区二区免费视频| 97精品超碰一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 国产精品九色蝌蚪自拍| 成人手机在线视频| 捆绑调教一区二区三区| 亚洲精品视频自拍| 精品福利一区二区三区免费视频| 色综合久久久久久久久| 国产一区二区不卡在线| 亚洲中国最大av网站| 亚洲欧洲韩国日本视频| 精品国产亚洲在线| 91精品国产综合久久香蕉的特点| 91福利视频网站| 成人a区在线观看| 精一区二区三区| 麻豆免费精品视频| 亚洲成av人片在线| 亚洲成人www| 爽爽淫人综合网网站| 亚洲一区二区三区三| 亚洲免费在线观看| 亚洲日本一区二区| 亚洲蜜臀av乱码久久精品| 国产精品亲子伦对白| 国产精品色哟哟| 中文字幕一区二区三中文字幕| 欧美精品一区二区三区一线天视频 | 色综合久久久久网| 欧美中文字幕久久| 欧美精品一级二级三级| 欧美日韩亚洲综合一区二区三区| 欧美丰满少妇xxxxx高潮对白| 欧美日韩一区小说| 欧美夫妻性生活| 中文字幕+乱码+中文字幕一区| 亚洲欧美一区二区不卡| 亚洲精品老司机| 日本不卡一二三区黄网| 丁香六月综合激情| 欧美日韩综合不卡| 久久影院午夜片一区| 一区二区视频免费在线观看| 亚洲成人午夜电影| 本田岬高潮一区二区三区| 欧美性感一区二区三区| 中文字幕在线观看不卡| 视频在线在亚洲| 日本韩国视频一区二区| 久久美女艺术照精彩视频福利播放 | 色伊人久久综合中文字幕| 日韩免费看的电影| 亚洲自拍偷拍av| 丁香五精品蜜臀久久久久99网站 | 老司机精品视频导航| 在线精品视频免费观看| 欧美激情综合在线| 老鸭窝一区二区久久精品| 欧美精品一二三区| 亚洲国产精品天堂| 欧美又粗又大又爽| 亚洲免费观看高清完整| 成人动漫精品一区二区| 欧美激情在线一区二区| 高清视频一区二区| 国产免费成人在线视频| 久久99精品久久久久久久久久久久| 欧美日韩mp4| 偷拍亚洲欧洲综合| 欧美午夜电影一区| jlzzjlzz亚洲日本少妇| 久久精品夜色噜噜亚洲aⅴ| 人禽交欧美网站| 欧美岛国在线观看| 国产精品亚洲视频| 久久久蜜臀国产一区二区| 国产精品一二三四五| 亚洲婷婷综合久久一本伊一区| 99久久精品费精品国产一区二区| 亚洲激情六月丁香| 5月丁香婷婷综合| 国产精品一区免费视频| 亚洲欧美一区二区久久| 欧美日韩国产电影| 丁香激情综合五月| 亚洲午夜久久久久久久久电影网| 日韩欧美中文字幕一区| 97久久精品人人做人人爽| 一区二区欧美视频| 久久综合精品国产一区二区三区| 懂色av噜噜一区二区三区av| 尤物av一区二区| 26uuu国产日韩综合| 欧美性生活久久| 极品销魂美女一区二区三区| 亚洲激情第一区| 中文字幕欧美区| 日韩女同互慰一区二区| 日本久久电影网| 成人高清免费在线播放| 久久99国产精品免费网站| 亚洲色图欧美偷拍| 中文字幕免费一区| 精品999在线播放| 日韩视频中午一区| 欧美日韩视频专区在线播放| 日本久久一区二区| 91免费视频观看| 国产 欧美在线| 国产91精品精华液一区二区三区| 琪琪一区二区三区| 午夜成人免费电影| 丝袜美腿亚洲一区二区图片| 亚洲成a人在线观看| 亚洲一区二区3| 亚洲在线观看免费| 亚洲成人午夜影院| 久久精品国产久精国产爱| 日韩和欧美的一区| 韩国v欧美v亚洲v日本v| 国内成人免费视频| 91小视频在线观看| 不卡的看片网站| 欧美日韩你懂得| 欧美成人一区二区| 久久久亚洲高清| 综合久久国产九一剧情麻豆| 亚洲与欧洲av电影| 老司机免费视频一区二区| 久久机这里只有精品| 波多野洁衣一区| 欧美亚洲愉拍一区二区| 日韩一区二区三区观看| 欧美经典一区二区三区| 亚洲精品午夜久久久| 国精品**一区二区三区在线蜜桃| 91麻豆免费视频| 欧美一卡2卡3卡4卡| 亚洲日本va午夜在线影院| 麻豆精品国产91久久久久久| 成人亚洲一区二区一| 91精品国产综合久久久久久| 国产精品成人午夜| 国产在线精品国自产拍免费| 欧美日韩成人激情| 国产精品久久久久久久久图文区| 日韩电影一区二区三区四区| 国产**成人网毛片九色| 精品伦理精品一区| 美女久久久精品| 欧美日韩午夜在线视频| 中文字幕欧美一| 成人动漫在线一区| 国产精品福利在线播放| 国模套图日韩精品一区二区| 欧美高清dvd| 日韩av一二三| 欧美一级生活片| 婷婷开心久久网| 欧美酷刑日本凌虐凌虐| 一区二区三区国产精华| 在线观看欧美精品| 亚洲精品自拍动漫在线| 欧美影院一区二区三区| 亚洲国产毛片aaaaa无费看| 欧美三级视频在线| 亚洲风情在线资源站| 欧美伊人精品成人久久综合97|