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

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

?? mdata.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* mData.c - contains frame transmit functions */
/* Copyright (c) 2001 Atheros Communications, Inc., All Rights Reserved */

#ident	"ACI $Id: //depot/sw/branches/ART_V53_dragon/sw/src/dk/mdk/devlib/mData.c#3 $, $Header: //depot/sw/branches/ART_V53_dragon/sw/src/dk/mdk/devlib/mData.c#3 $"

/* 
Revsision history
--------------------
1.0 	  Created.
*/
 
//#define DEBUG_MEMORY  

#ifdef VXWORKS
#include "timers.h"
#include "vxdrv.h"
#endif

#ifdef __ATH_DJGPPDOS__
#include <unistd.h>
#ifndef EILSEQ  
    #define EILSEQ EIO
#endif	// EILSEQ

#define __int64	long long
typedef unsigned long DWORD;
#define HANDLE long
#define Sleep	delay
#endif	// #ifdef __ATH_DJGPPDOS__

#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "wlantype.h"
#include "athreg.h"
#include "manlib.h"
#include "mdata.h"
#include "stats_routines.h"
#include "mEeprom.h"
#include "mConfig.h"
#ifndef VXWORKS
#include <malloc.h>
#ifdef LINUX
#include "linuxdrv.h"
#else
#include "ntdrv.h"
#endif
#endif // VXWorks
#include "mData210.h"
#include "mData211.h"
#include "mData212.h"
#include "..\ar5513\mData513.h"
#include "mDevtbl.h"
#include "mIds.h"

//#ifdef LINUX
//#undef ARCH_BIG_ENDIAN
//#endif

#ifdef ARCH_BIG_ENDIAN 
#include "endian_func.h"
#endif

#if defined(COBRA_AP) && defined(PCI_INTERFACE)
#include "ar531xPlusreg.h"
#endif

static void mdkExtractAddrAndSequence(A_UINT32 devNum, RX_STATS_TEMP_INFO *pStatsInfo);
static void mdkCountDuplicatePackets(A_UINT32	devNum, 
				RX_STATS_TEMP_INFO	*pStatsInfo, A_BOOL *pIsDuplicate);
static void mdkGetSignalStrengthStats(SIG_STRENGTH_STATS *pStats, A_INT8	signalStrength);
static void txAccumulateStats(A_UINT32 devNum, A_UINT32 txTime, A_UINT16 queueIndex);
static void mdkExtractTxStats(A_UINT32	devNum, TX_STATS_TEMP_INFO	*pStatsInfo, A_UINT16 queueIndex);
static void mdkExtractRxStats(A_UINT32 devNum, RX_STATS_TEMP_INFO	*pStatsInfo);
static void sendStatsPkt(A_UINT32 devNum, A_UINT32 rate, A_UINT16 StatsType, A_UCHAR *dest);
static A_BOOL mdkExtractRemoteStats(A_UINT32 devNum, RX_STATS_TEMP_INFO *pStatsInfo);
static void comparePktData(A_UINT32 devNum, RX_STATS_TEMP_INFO	*pStatsInfo);
static void extractPPM(A_UINT32 devNum, RX_STATS_TEMP_INFO *pStatsInfo);
static A_UINT32 countBits(A_UINT32 mismatchBits);
static void fillCompareBuffer(A_UCHAR *pBuffer, A_UINT32 compareBufferSize, 
				A_UCHAR *pDataPattern, A_UINT32 dataPatternLength);
static void fillRxDescAndFrame(A_UINT32 devNum, RX_STATS_TEMP_INFO *statsInfo);

#if defined(__ATH_DJGPPDOS__)
static A_UINT32 milliTime(void);
#endif

////////////////////// __TODO__   ////////////////////////////////////////////////////////////////////////////////
MANLIB_API void txDataStart(A_UINT32 devNum);
MANLIB_API void txDataComplete(A_UINT32 devNum, A_UINT32 timeout, A_UINT32 remoteStats);

A_UINT32 buf_ptr;
A_UCHAR *tmp_pktDataPtr;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

static char bitCount[256] = {
//	0  1  2  3	4  5  6  7	8  9  a  b	c  d  e  f
	0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 	// 0X
	1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 	// 1X
	1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 	// 2X
	2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 	// 3X
	1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 	// 4X
	2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 	// 5X
	2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 	// 6X
	3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 	// 7X
	1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 	// 8X
	2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 	// 9X
	2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 	// aX
	3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 	// bX
	2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 	// cX
	3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 	// dX
	3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 	// eX
	4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8		// fX
};

// A quick lookup translating from rate 6, 9, 12... to the stats_struct array index
//static const A_UCHAR StatsRateArray[19] = 
//	{0, 0, 1, 2, 3, 0, 4, 0, 5, 0,	0,	0,	6,	0,	0,	0,	7,	0,	8};
//#define rate2bin(x) (StatsRateArray[((x)/3)])

// A quick lookup translating from IEEE rate field to the stats bin
//static const A_UCHAR IEEErateArray[8] = {7, 5, 3, 1, 8, 6, 4, 2};
//#define descRate2bin(x) (IEEErateArray[(x)-8])

/**************************************************************************
* txDataSetupNoEndPacket - create packet and descriptors for transmission
*                          with no end packet. added to be used for falcon
*                          11g synthesizer phase offset.
*/
MANLIB_API void txDataSetupNoEndPacket
(
 A_UINT32 devNum, 
 A_UINT32 rateMask, 
 A_UCHAR *dest, 
 A_UINT32 numDescPerRate, 
 A_UINT32 dataBodyLength, 
 A_UCHAR *dataPattern, 
 A_UINT32 dataPatternLength, 
 A_UINT32 retries, 
 A_UINT32 antenna, 
 A_UINT32 broadcast
)
{
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];

	pLibDev->noEndPacket = TRUE;

	txDataSetup(devNum, rateMask, dest, numDescPerRate, dataBodyLength,
				dataPattern, dataPatternLength, retries, antenna, broadcast);
}

/**************************************************************************
* txDataSetup - create packet and descriptors for transmission
*
*/
MANLIB_API void txDataSetup
(
 A_UINT32 devNum, 
 A_UINT32 rateMask, 
 A_UCHAR *dest, 
 A_UINT32 numDescPerRate, 
 A_UINT32 dataBodyLength, 
 A_UCHAR *dataPattern, 
 A_UINT32 dataPatternLength, 
 A_UINT32 retries, 
 A_UINT32 antenna, 
 A_UINT32 broadcast
)
{
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
	A_UCHAR 	rates[NUM_RATES];
	A_UINT32	mask = 0x01;
	A_UINT16	i, j, numRates, rateIndex, prevRateIndex, rateValue;
	A_UINT32	descAddress, dIndex, descOp;
	A_UINT32	antMode = 0;
	A_UINT32	pktSize;
	A_UINT32	pktAddress;
	MDK_ATHEROS_DESC	*localDescPtr;		   //pointer to current descriptor being filled
	MDK_ATHEROS_DESC    *localDescBuffer;      //create a local buffer to create descriptors
	A_UINT16	 queueIndex;
	A_BOOL		probePkt = FALSE;
	A_UINT16    mdkPktType = MDK_NORMAL_PKT;
	A_UINT32 *dPtr, lastDesc = 0, intrBit ;
	A_UINT32    falconAddrMod = 0;
#ifdef _TIME_PROFILE
    A_UINT32 txDataSetup_start, txDataSetup_end;
    txDataSetup_start=milliTime();
printf("txDataSetup_start=%u\n", txDataSetup_start);
#endif

	//overloading the broadcast param with additional flags
	if(broadcast & PROBE_PKT) {
		probePkt = TRUE;
		mdkPktType = MDK_PROBE_PKT;

		//setup the probe packets on a different queue
		pLibDev->txProbePacketNext = TRUE;
		queueIndex = PROBE_QUEUE;
		if(pLibDev->backupSelectQueueIndex != PROBE_QUEUE) { //safety check so we don't backup probe_queue index
			pLibDev->backupSelectQueueIndex = pLibDev->selQueueIndex;
		}
		pLibDev->selQueueIndex = PROBE_QUEUE;
	}
	else {
		pLibDev->selQueueIndex = 0;
		queueIndex = pLibDev->selQueueIndex;
	}

	//cleanup broadcast flag after cleaning up overloaded flags
	broadcast = broadcast & 0x1;

#ifdef DEBUG_MEMORY
printf("SNOOP::txDataSetup::broadcast=%x\n", broadcast);
printf("SNOOP::dest %x:%x:%x:%x:%x:%x\n", dest[6], dest[5], dest[4], dest[3], dest[2], dest[1], dest[0]);
#endif

	pLibDev->tx[queueIndex].dcuIndex = 0;


	pLibDev->tx[queueIndex].retryValue = retries;		
	//verify some of the arguments
	if (checkDevNum(devNum) == FALSE) {
		mError(devNum, EINVAL, "Device Number %d:txDataSetup\n", devNum);
		return;
	}
	
	if(pLibDev->devState < RESET_STATE) {
		mError(devNum, EILSEQ, "Device Number %d:txDataSetup: device not in reset state - resetDevice must be run first\n", devNum);
		return;
	}

	if (0 == numDescPerRate) {
		mError(devNum, EINVAL, "Device Number %d:txDataSetup: must create at least 1 descriptor per rate\n", devNum);
		return;
	}

	/* we must take the MDK pkt header into consideration here otherwise it could make the 
	 * body size greater than an 802.11 pkt body
	 */
	if(dataBodyLength > (MAX_PKT_BODY_SIZE - sizeof(MDK_PACKET_HEADER) - sizeof(WLAN_DATA_MAC_HEADER3) - FCS_FIELD)) {
		mError(devNum, EINVAL, "Device Number %d:txDataSetup: packet body size must be less than %d [%d - (%d + %d + %d)]\n", devNum, 
								(MAX_PKT_BODY_SIZE - sizeof(MDK_PACKET_HEADER) - sizeof(WLAN_DATA_MAC_HEADER3) - FCS_FIELD), 
								MAX_PKT_BODY_SIZE,
								sizeof(MDK_PACKET_HEADER),
								sizeof(WLAN_DATA_MAC_HEADER3),
								FCS_FIELD);
		return;
	}

	// reset the txEnable. Only one queue is supported at a time for now 
	//FJC removed this now that am using another queue for probe packets
	//txEnable gets reset in cleanup below
//	for( i = 0; i < MAX_TX_QUEUE; i++ )
//	{
//	 	pLibDev->tx[i].txEnable=0;
//	}

	//cleanup any stuff from previous go round
	if (pLibDev->tx[queueIndex].pktAddress) {
		memFree(devNum, pLibDev->tx[queueIndex].pktAddress);
		pLibDev->tx[queueIndex].pktAddress = 0;
		memFree(devNum, pLibDev->tx[queueIndex].descAddress);
		pLibDev->tx[queueIndex].descAddress = 0;
		pLibDev->tx[queueIndex].txEnable = 0;
	}
	if(pLibDev->tx[queueIndex].endPktAddr) {
		memFree(devNum, pLibDev->tx[queueIndex].endPktAddr);
		memFree(devNum, pLibDev->tx[queueIndex].endPktDesc);
		pLibDev->tx[queueIndex].endPktAddr = 0;
		pLibDev->tx[queueIndex].endPktDesc = 0;
	}

	//create rate array and findout how many rates there are
	for (i = 0, numRates = 0; i < NUM_RATES; i++)
	{
		if (rateMask & mask) {
			rates[numRates] = rateValues[i];
			numRates++;
		}
		mask = (mask << 1) & 0xffffff;			
	}

#ifdef DEBUG_MEMORY
	printf("SNOOP::txDataSetup::mask=%x:rateMask=%x\n", mask, rateMask);
	printf("SNOOP::txDataSetup::numRates=%d:numDescPerRate=%d\n", numRates, numDescPerRate);
#endif


	//create the required number of descriptors
	pLibDev->tx[queueIndex].numDesc = numDescPerRate * numRates;
	pLibDev->tx[queueIndex].descAddress = memAlloc( devNum, 
					pLibDev->tx[queueIndex].numDesc * sizeof(MDK_ATHEROS_DESC));

	if (0 == pLibDev->tx[queueIndex].descAddress) {
		mError(devNum, ENOMEM, "Device Number %d:txDataSetup: unable to allocate client memory for %d descriptors\n", devNum, pLibDev->tx[queueIndex].numDesc);
		return;
	}

	//setup the transmit packets
	if (pLibDev->noEndPacket) {
		createTransmitPacket(devNum, MDK_SKIP_STATS_PKT, dest, pLibDev->tx[queueIndex].numDesc, 
			dataBodyLength, dataPattern, dataPatternLength, broadcast, queueIndex,
			&pktSize, &(pLibDev->tx[queueIndex].pktAddress));
	} else {
        	createTransmitPacket(devNum, mdkPktType, dest, pLibDev->tx[queueIndex].numDesc,  \
	        	dataBodyLength, dataPattern, dataPatternLength, broadcast, queueIndex, \
		        &pktSize, &(pLibDev->tx[queueIndex].pktAddress));
	}
	//take a copy of the dest address
	memcpy(pLibDev->tx[queueIndex].destAddr.octets, dest, WLAN_MAC_ADDR_SIZE);
	pLibDev->tx[queueIndex].dataBodyLen = dataBodyLength;

	//setupAntennaAr5210( devNum, antenna, &antMode );
	if (!ar5kInitData[pLibDev->ar5kInitIndex].pMacAPI->setupAntenna(devNum, antenna, &antMode))
	{
		return;
	}

	rateIndex = 0;
	prevRateIndex = rateIndex;
	descAddress = pLibDev->tx[queueIndex].descAddress;
	pktAddress = pLibDev->tx[queueIndex].pktAddress;

	if (isFalcon(devNum) || isDragon(devNum)) {
		falconAddrMod = FALCON_MEM_ADDR_MASK ;
	}

	localDescBuffer = (MDK_ATHEROS_DESC *)malloc(sizeof(MDK_ATHEROS_DESC) * pLibDev->tx[queueIndex].numDesc);
	if (!localDescBuffer) {
		mError(devNum, ENOMEM, "Device Number %d:txDataSetup: unable to allocate host memory for %d tx descriptors\n", devNum, pLibDev->tx[queueIndex].numDesc);
		return;
	}
	dIndex = 0;
	localDescPtr = localDescBuffer;
	for (i = 0, j = 0; i < pLibDev->tx[queueIndex].numDesc; i++)
	{
		rateValue = rates[rateIndex];

		//write buffer ptr to descriptor
#if defined(COBRA_AP) && defined(PCI_INTERFACE)
	    if(isCobra(pLibDev->swDevID)) {
			localDescPtr->bufferPhysPtr = pktAddress;
		}
		else {
			localDescPtr->bufferPhysPtr = pktAddress | HOST_PCI_SDRAM_BASEADDR;
		}
#else
		localDescPtr->bufferPhysPtr = pktAddress;
#endif
		
		ar5kInitData[pLibDev->ar5kInitIndex].pMacAPI->setDescriptor( devNum, localDescPtr, pktSize, 
							antMode, i, rateValue, broadcast );


		//write link pointer
		if (i == (pLibDev->tx[queueIndex].numDesc - 1)) { //ie its the last descriptor 
			localDescPtr->nextPhysPtr = 0;
		//	localDescPtr->nextPhysPtr = pLibDev->tx[queueIndex].descAddress;
		}
		else {
#if defined(COBRA_AP) && defined(PCI_INTERFACE)
		    if(isCobra(pLibDev->swDevID)) {
			    localDescPtr->nextPhysPtr = (descAddress + sizeof(MDK_ATHEROS_DESC));
			}
		    else {
			    localDescPtr->nextPhysPtr = (descAddress + sizeof(MDK_ATHEROS_DESC)) | HOST_PCI_SDRAM_BASEADDR;
			}
#else
			localDescPtr->nextPhysPtr = falconAddrMod | (descAddress + sizeof(MDK_ATHEROS_DESC));
#endif
		}

		//writeDescriptor(devNum, descAddress, &localDesc);
//		zeroDescriptorStatus(devNum, localDescPtr, pLibDev->swDevID);
		//increment rate index for next time round
		if(!(rateMask & RATE_GROUP)) {
			(rateIndex == numRates - 1) ? rateIndex = 0 : rateIndex++;
		}
		else {
			if (j == (numDescPerRate - 1)) {
				j = 0; 
				rateIndex++;
    			if (pLibDev->devMap.remoteLib) {
					dPtr = (A_UINT32 *)localDescPtr;

					lastDesc = LAST_DESC_NEXT << DESC_INFO_LAST_DESC_BIT_START;
					localDescPtr->hwControl[0] &= ~DESC_TX_INTER_REQ;
					intrBit = 0;
					descOp = ((sizeof(MDK_ATHEROS_DESC)/sizeof(A_UINT32))+1) << DESC_OP_WORD_OFFSET_BIT_START;

					if (i == (pLibDev->tx[queueIndex].numDesc-1)) {
					   	lastDesc = LAST_DESC_NULL << DESC_INFO_LAST_DESC_BIT_START;
						intrBit = DESC_TX_INTER_REQ_START <<  DESC_OP_INTR_BIT_START;
						descOp = intrBit | \
								 ((numDescPerRate-1)  << DESC_OP_NDESC_OFFSET_BIT_START) | \
								 (2 << DESC_OP_WORD_OFFSET_BIT_START);
					}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜a∨在线一区二区三区不卡| 欧美美女一区二区在线观看| 亚洲欧美另类图片小说| 国产精品狼人久久影院观看方式| 日本精品一区二区三区四区的功能| 日韩综合在线视频| 国产亚洲精品久| 欧美精品xxxxbbbb| 99re这里只有精品视频首页| 蜜臀av一级做a爰片久久| 国产精品久久久久桃色tv| 日韩色视频在线观看| 91国产成人在线| 国产毛片精品视频| 免费av成人在线| 亚洲第一会所有码转帖| 中文在线一区二区| 久久亚洲精华国产精华液| 欧美午夜电影在线播放| av中文一区二区三区| 另类欧美日韩国产在线| 天天做天天摸天天爽国产一区| 亚洲欧洲美洲综合色网| 久久久不卡网国产精品二区| 欧美人妇做爰xxxⅹ性高电影 | 国产一区二区福利视频| 亚洲成人www| 亚洲女爱视频在线| 国产精品天天看| 久久精品欧美一区二区三区不卡| 日韩一区二区三区视频在线观看| 在线观看精品一区| 色婷婷久久99综合精品jk白丝| 国产99久久久国产精品潘金| 国产综合一区二区| 久久精品国产一区二区三区免费看| 香蕉av福利精品导航| 亚洲一区二区高清| 亚洲在线视频免费观看| 一区二区三区在线视频观看| 亚洲三级在线免费观看| 亚洲乱码国产乱码精品精的特点 | 亚洲图片欧美综合| 亚洲一区二区免费视频| 一个色综合av| 亚洲中国最大av网站| 亚洲一区二区三区四区五区中文| 亚洲免费在线电影| 一区二区三区中文在线观看| 尤物在线观看一区| 亚洲国产一区二区在线播放| 亚洲一区二区视频在线观看| 亚洲一级在线观看| 天堂av在线一区| 日韩av不卡一区二区| 久久国产精品第一页| 国产在线乱码一区二区三区| 国产一区二区视频在线播放| 国产电影精品久久禁18| 99精品欧美一区二区三区小说| 99re这里都是精品| 精品视频在线免费观看| 91麻豆精品国产自产在线观看一区 | 国产三级精品三级在线专区| 国产亚洲成av人在线观看导航 | 91福利视频在线| 欧美日韩一区二区三区四区| 日韩一区二区在线观看视频播放| 精品日韩一区二区| 国产精品入口麻豆九色| 一区二区在线观看免费| 肉色丝袜一区二区| 国产东北露脸精品视频| 色婷婷亚洲婷婷| 91精品国产福利在线观看| 精品久久久久久最新网址| 国产精品视频yy9299一区| 亚洲最大的成人av| 久久97超碰色| 99热这里都是精品| 91精品国产色综合久久不卡电影 | 亚洲乱码国产乱码精品精小说| 亚洲sss视频在线视频| 韩国三级中文字幕hd久久精品| 丁香婷婷深情五月亚洲| 精品视频1区2区| 久久天天做天天爱综合色| 亚洲欧美日韩小说| 久久精品理论片| 91蜜桃免费观看视频| 日韩午夜激情av| 亚洲欧美日韩成人高清在线一区| 美腿丝袜亚洲一区| 99久久亚洲一区二区三区青草| 在线播放/欧美激情| 国产精品免费免费| 日韩电影在线一区二区| av高清久久久| 日韩精品一区二区三区老鸭窝| 亚洲丝袜精品丝袜在线| 久久99久久久欧美国产| 欧亚一区二区三区| 欧美精彩视频一区二区三区| 视频一区在线播放| 一本久久精品一区二区| xfplay精品久久| 天天影视色香欲综合网老头| 成人av在线网| 久久亚洲免费视频| 秋霞电影一区二区| 欧洲精品中文字幕| 亚洲欧美日韩国产综合| 国产精品中文有码| 91精品国产入口| 亚洲综合无码一区二区| 成人激情动漫在线观看| 欧美精品一区男女天堂| 日韩制服丝袜av| 欧美亚男人的天堂| 亚洲欧美日韩中文字幕一区二区三区| 国产精品1区2区| 精品国产精品网麻豆系列| 日韩二区在线观看| 欧美军同video69gay| 亚洲专区一二三| 在线一区二区三区做爰视频网站| 国产精品视频麻豆| 福利电影一区二区三区| 久久精品一区二区三区不卡牛牛| 麻豆91精品91久久久的内涵| 欧美精品日韩一本| 日本怡春院一区二区| 欧美男男青年gay1069videost| 亚洲一区二区三区四区在线| 色综合av在线| 亚洲激情综合网| 色视频一区二区| 亚洲精品视频一区| 91成人在线观看喷潮| 亚洲精品网站在线观看| 在线日韩av片| 亚洲第一电影网| 欧美巨大另类极品videosbest| 亚洲一区二区高清| 欧美一区二区在线免费观看| 日本特黄久久久高潮| 日韩一区二区高清| 精品一区中文字幕| 国产亚洲综合在线| 成人在线视频一区| 亚洲视频在线观看三级| 色女孩综合影院| 亚洲综合色丁香婷婷六月图片| 欧美午夜精品久久久久久孕妇| 亚洲国产中文字幕| 日韩一区二区三区视频| 国内精品写真在线观看| 国产欧美1区2区3区| 99久久亚洲一区二区三区青草| 一区二区三区日韩欧美| 欧美日韩国产综合草草| 久久99久久精品欧美| 国产人久久人人人人爽| 91丝袜呻吟高潮美腿白嫩在线观看| 一区二区三区欧美日| 91精品国产综合久久精品麻豆| 国产综合色在线| 一区二区中文视频| 欧美日韩午夜在线| 国产一区欧美二区| 亚洲视频一二三区| 91精品国产综合久久福利软件| 狠狠色丁香婷婷综合| 国产精品大尺度| 欧美日高清视频| 国产精品系列在线播放| 亚洲精品大片www| 欧美va在线播放| 色综合一个色综合| 免费欧美在线视频| 国产精品久久久久久久久图文区| 在线免费观看视频一区| 久久精品国产网站| 亚洲人成网站精品片在线观看| 欧美一区二区三区不卡| 成人国产精品视频| 日本中文字幕一区二区视频 | 亚洲乱码中文字幕综合| 在线播放91灌醉迷j高跟美女 | 精品一区二区综合| 亚洲欧美另类久久久精品| 欧美α欧美αv大片| 91麻豆6部合集magnet| 久久精品国产亚洲5555| 一区二区在线观看视频| 久久欧美一区二区| 欧美精品乱码久久久久久| 成人av集中营| 久久精品99久久久| 亚洲va韩国va欧美va精品|