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

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

?? sndsend.c

?? 三星公司出arm7內核4510VXWORKS環境下驅動開發包
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* sndsEnd.c - SNDS END network interface driver for Ethernet */

/* Copyright 1984-1997 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01f,25nov99,knp, changed the name from "end" to "secEnd"
01e,12nov99,knp, Corrected handling EIOCSFLAGS, added IFF_MULTICAST flag
01d,06nov99,knp, updated multicast address support
01c,18oct99,knp added polled mode support
01b,27sep99,nb  added documentation
01a,20sep99,nts&knp  adapted from WRS template
*/

/*
DESCRIPTION

This module implements the Enhanced Ethernet driver for Samsung SNDS100 Ver 1.0
Evaluation Board for their KS32C50100 microcontroller.

KS32C50100 is an ARM based processor with several integrated peripherals.
It has an interrupt controller, two 32-bit timers, one Ethernet controller,
two HDLC controllers, one IIC controller, general purpose I/O ports, and a 
2-channel DMA controller.

The built-in Ethernet controller consists of 10/100 Ethernet MAC with MII
interface to an external PHY device and a Buffered DMA controller for
transferring data to and from the memory.  The SNDS100 board has a Level One
LXT970 Ethernet PHY device that supports both 10Base-T and 100Base-T
Ethernet.

All the internal registers of the Ethernet MAC and BDMA controller are
accessible as 32-bit integers at the internal system register addresses as
defined in the KS32C50100 Microcontroller User's Manual.  The register 
addresses are defined in sndsend.h include file.

The driver requires several target-specific values provided as an input 
string to the load routine.  These target-specific values and the external 
support routines are described below.

This network interface driver does not include support for trailer protocols
or data chaining.  However, buffer loaning has been implemented in an effort 
to boost performance.

This driver maintains cache coherency by setting the Address bit 26 (A26) of
descriptor and buffer addresses.  KS32C50100 accesses all memory locations
with A26 set in a non-cached mode.  However, A26 is not used for accessing
the memory.  See the KS32C50100 Microcontroller User's Manual for details.
Because of this feature, allocating buffer space using the cacheDmaMalloc()
routine is not required.

BOARD LAYOUT
This device is on-chip.  No jumpering diagram is necessary.

EXTERNAL INTERFACE
This driver provides the standard END external interface.  The only external
interface is the sndsEndLoad() routine.  The parameters are passed
into the sndsEndLoad() function as a single colon-delimited string.
The sndsEndLoad() function uses strtok() to parse the string, which it 
expects to be of the following format:

<unit>:<speed>:<duplex>:<autoneg>

TARGET-SPECIFIC PARAMETERS

.IP <unit>
A convenient holdover from the former model.  This parameter is used only
in the string name for the driver.  Value must be 0

.IP <speed>
Indicates the desired network speed.  Valid values are 10 and 100.  This
parameter is ignored if auto-negotiation is enabled.  See below.

.IP "<duplex>"
Indicates the desired duplex mode of operation.  A value 1 indicates full-
duplex and a value 0 indicated half duplex.  This parameter is ignored if
auto-negotiation is enabled.

.IP "<auto-neg>"
Indicates whether auto-negotiation has to be enabled or not.  A value of 1
indicates that auto-negotiation should be enabled.  A value of 0 indicates
that it should be disabled.  If auto-negotiation is enabled, the speed and
duplex values are ignored.

.LP

SYSTEM RESOURCE USAGE
When implemented, this driver requires the following system resources:

    - one mutual exclusion semaphore
    - four interrupt vectors

The driver allocates the memory to share with the Ethernet device unit.
It does so by calling the calloc() routine.  As a default, 64 transmit 
descriptors (size=16 bytes), 64 transmit buffers (size=END_BUFSIZ), and
64 receive descriptors (size=16 bytes) are allocated.  TX_FD_NUM and RX_FD_NUM
macros define the number of descriptors allocated.

As a default, 128 MBLK structures, 128 CLBLK structures and 128 clusters
(size=2048) are allocated in the net pool.  END_MBLK_NUM and END_CL_NUM 
macros define the number of structures allocated.

The macros SYS_INT_CONNECT, SYS_INT_DISCONNECT, and SYS_INT_ENABLE allow
the driver to be customized for BSPs that use special versions of these
routines.

The macro SYS_INT_CONNECT is used to connect the interrupt handler to
the appropriate vector.  By default it is the routine intConnect().

The macro SYS_INT_DISCONNECT is used to disconnect the interrupt handler prior
to unloading the module.  By default this is a dummy routine that
returns OK.

The macro SYS_INT_ENABLE is used to enable the interrupt level for the
end device.  It is called once during initialization.  By default this is
the routine intEnable().

The macro SYS_ENET_ADDR_GET is used to get the ethernet address (MAC)
for the device.  The single argument to this routine is the END_DEVICE
pointer.  By default this routine copies the ethernet address stored in
the global variable sndsEndEnetAddr defined in sndsend.h into the 
END_DEVICE structure.  The global variable has to be changed for changing
the MAC address of the Ethernet port.

SPECIAL CONSIDERATION

The MAC address of Ethernet port is hard-coded in the global array named
sndsEndEnetAddr defined in sndsEnd.h

The internal registers of MAC and BDMA controllers in the KS32C50100
microcontroller are accessible as 32-bit integers at pre-defined address
locations.  Hence separate macros are not provided for register accesses.
All through the driver code, these registers are accessed directly.

INCLUDES:
end.h endLib.h etherMultiLib.h sndsend.h

SEE ALSO: muxLib, endLib
.I "Writing and Enhanced Network Driver"
*/

/* includes */

#include "vxWorks.h"
#include "sndsEnd.h"			/* mod knp 7sep99"drv/end/sndsEnd.h"Common defines. */
#include "etherMultiLib.h"		/* multicast stuff. */
#include "end.h"			/* Common END structures. */
#include "endLib.h"
#include "lstLib.h"			/* Needed to maintain protocol list. */
#include "cacheLib.h"
#include "stdlib.h"
#include "stdio.h"
#include "intLib.h"
#include "iv.h"
#include "netLib.h"
#include "config.h"

/* defines */

/* Configuration items */
#define ENET_HDR_REAL_SIZ 	14
#define END_BUFSIZ      	(ETHERMTU + ENET_HDR_REAL_SIZ + 6)
#define END_SPEED        	10000000
#define	SNDS_CL_SIZE		2048
#define	RX_FD_NUM			64
#define	TX_FD_NUM			64

#define LS_POLLING          0x20

/*
 * Default macro definitions for BSP interface.
 * These macros can be redefined in a wrapper file, to generate
 * a new module with an optimized interface.
 */

/* Macro to connect interrupt handler to vector */

#ifndef SYS_INT_CONNECT
#   define SYS_INT_CONNECT(pDrvCtrl,rtn,arg,pResult) \
	{ \
	IMPORT STATUS sysIntConnect(); \
	*pResult = intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivec), \
			     rtn, (int)arg); \
	}
#endif

/* Macro to disconnect interrupt handler from vector */

#ifndef SYS_INT_DISCONNECT
#   define SYS_INT_DISCONNECT(pDrvCtrl,rtn,arg,pResult) \
	{ \
	*pResult = OK; /* HELP: need a real routine */ \
	}
#endif

/* Macro to enable the appropriate interrupt level */

#ifndef SYS_INT_ENABLE
#define SYS_INT_ENABLE(pDrvCtrl) \
	{ \
	IMPORT void sysLanIntEnable(); \
	sysLanIntEnable (pDrvCtrl->ilevel); \
	}
#endif

/* Macro to get the ethernet address from the BSP */

#ifndef SYS_ENET_ADDR_GET
#   define SYS_ENET_ADDR_GET(pDevice) \
	{ \
	IMPORT unsigned char sndsEndEnetAddr[]; \
	bcopy ((char *)sndsEndEnetAddr, (char *)(&pDevice->enetAddr), 6); \
	}
#endif

/*
 * Macros to do a short (UINT16) access to the chip. Default
 * assumes a normal memory mapped device.
 */

#ifndef SNDS_OUT_SHORT
#   define SNDS_OUT_SHORT(pDrvCtrl,addr,value) \
	(*(USHORT *)addr = value)
#endif

#ifndef SNDS_IN_SHORT
#   define SNDS_IN_SHORT(pDrvCtrl,addr,pData) \
	(*pData = *addr)
#endif

#ifndef SNDS_OUT_LONG
#   define SNDS_OUT_LONG(pDrvCtrl,addr,value) \
	(*(UINT32 *)addr = value)
#endif

#ifndef SNDS_IN_LONG
#   define SNDS_IN_LONG(pDrvCtrl,addr,pData) \
	(*pData = *addr)
#endif

/*A shortcut for getting the hardware address from the MIB II stuff. */


#define END_HADDR(pEnd)	\
		((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)

#define END_HADDR_LEN(pEnd) \
		((pEnd)->mib2Tbl.ifPhysAddress.addrLength)

/* typedefs */

typedef struct free_args
    {
    void* arg1;
    void* arg2;
    } FREE_ARGS;

/* The definition of the driver control structure */

typedef struct end_device
    {
	END_OBJ    	end;			/* The class we inherit from. */
    int			unit;			/* unit number */
 	int			ivecBdmaTx;		/* bdmaTx interrupt vector */
	int			ivecBdmaRx;		/* bdmaRx interrupt vector */
	int			ivecMacTx;		/* macTx  interrupt vector */
	int			ivecMacRx;		/* macRx  interrupt vector */
    long		flags;			/* Our local flags. */
    UCHAR		enetAddr[6];	/* ethernet address */
	UCHAR		netSpeed;		/* 10 or 100 */
	UCHAR		duplexMode;		/* HDX = 0. FDX = 1 */
	UCHAR		autoNeg;		/* 1 = autoneg enabled */
	BOOL		fdInitialized;	/* Set to TRUE after FD allocation */
	ETHER_STATISTICS	statistics;	/* Ethernet statistics counters */
	UINT32	addrList[32];	/* Array for storing addresses Max = 21, i.e. 32 long words */
	UINT32	mcastAddrCount;	/* Number of valid multicast addresses */
    } END_DEVICE;

/* globals*/

/*
 * This will only work if there is only a single unit, for multiple
 * unit device drivers these should be integrated into the END_DEVICE
 * structure.
 */

M_CL_CONFIG endMclConfig = 	/* network mbuf configuration table */
    {
    /* 
    no. mBlks		no. clBlks		memArea		memSize
    -----------		----------		-------		-------
    */
    0, 				0, 				NULL, 		0 
    };

CL_DESC endClDescTbl [] = 	/* network cluster pool configuration table */
    {
    /* 
    clusterSize		num		memArea		memSize
    -----------		----	-------		-------
    */
    {SNDS_CL_SIZE,	0,		NULL,		0}
    };

int endClDescTblNumEnt = (NELEMENTS(endClDescTbl));

/* new additions */

RECEIVE_FRAME_DESC 		*gpReceiveFrameDescStart;
TRANSMIT_FRAME_DESC 	*gpTransmitFrameDescStart;
UINT32 					 gStatusLengthPrevious;			/* For bug fix */
BOOL	gBugFixDone = FALSE;

/* Definitions for the flags field */

#define END_PROMISCUOUS_FLAG	0x1
#define END_RCV_HANDLING_FLAG	0x2
#define END_MBLK_NUM			128
#define END_CL_NUM				128
#define	SNDS_DATA_OFFSET 		2
#define	SNDS_MAX_MULTI	20

/* DEBUG MACROS */

#undef DEBUG

#ifdef DEBUG
#include "nvLogLib.h"			/* Needed to debug polled mode.  */
int endDebug = 1;
#define ENDLOGMSG(x) \
	if (endDebug) \
	    { \
	    logMsg x; \
	    }
#else
#define ENDLOGMSG(x)
#endif /* ENDDEBUG */

/* LOCALS */

#ifdef INCLUDE_SNDS_END

/* forward static functions */

LOCAL void		sndsEndReset			(END_DEVICE *pDrvCtrl);    /* added by knp/nts 14/9/99 */
LOCAL STATUS	sndsEndStart			(END_DEVICE *pDrvCtrl);    /* added by knp/nts 14/9/99 */
LOCAL void		sndsEndBdmaRxInt		(END_DEVICE *pDrvCtrl);    /* added by knp/nts 15/9/99 */
LOCAL void		sndsEndBdmaTxInt		(END_DEVICE *pDrvCtrl);
LOCAL void		sndsEndMacRxInt			(END_DEVICE *pDrvCtrl);
LOCAL void		sndsEndMacTxInt			(END_DEVICE *pDrvCtrl);
LOCAL void		sndsEndHandleRcvInt 	(END_DEVICE *pDrvCtrl, UINT32 stat);
LOCAL STATUS	sndsEndRecv				(END_DEVICE *pDrvCtrl, char* pData, UINT32 length);
LOCAL void		sndsEndConfig			(END_DEVICE *pDrvCtrl);
LOCAL UINT32	sndsEndPhyRead 			(UINT32 phyRegAddr, UINT32 phyAddr);
LOCAL void 		sndsEndPhyWrite 		(UINT32 phyRegAddr, UINT32 phyAddr, UINT32 phyData);
LOCAL void 		sndsEndMacInitialize	(END_DEVICE *pDevice);
LOCAL STATUS	sndsEndFdInitialize		(END_DEVICE *pDrvCrtl);
LOCAL void 		sndsEndFdFree			(END_DEVICE *pDrvCtrl);
LOCAL void 		sndsEndBugFix 			(UINT16 *);
LOCAL void sndsEndAddrFilterSet			(END_DEVICE *pDrvCtrl);

/* END Specific interfaces. */

/* This is the only externally visible interface. */

END_OBJ* 	sndsEndLoad (char* initString);

LOCAL STATUS	sndsEndStart		(END_DEVICE* pDrvCtrl);
LOCAL STATUS	sndsEndStop			(END_DEVICE* pDrvCtrl);
LOCAL STATUS	sndsEndUnload		();
LOCAL int		sndsEndIoctl		(END_DEVICE* pDrvCtrl, int cmd, caddr_t data);
LOCAL STATUS	sndsEndSend			(END_DEVICE* pDrvCtrl, M_BLK_ID pBuf);
			  
LOCAL STATUS	sndsEndMCastAdd 	(END_DEVICE* pDrvCtrl, char* pAddress);
LOCAL STATUS	sndsEndMCastDel 	(END_DEVICE* pDrvCtrl, char* pAddress);
LOCAL STATUS	sndsEndMCastGet 	(END_DEVICE* pDrvCtrl, MULTI_TABLE* pTable);
LOCAL STATUS	sndsEndPollSend 	(END_DEVICE* pDrvCtrl, M_BLK_ID pBuf);
LOCAL STATUS	sndsEndPollRcv 		(END_DEVICE* pDrvCtrl, M_BLK_ID pBuf);
LOCAL STATUS	sndsEndPollStart 	(END_DEVICE* pDrvCtrl);
LOCAL STATUS	sndsEndPollStop 	(END_DEVICE* pDrvCtrl);

LOCAL STATUS	sndsEndParse		();
LOCAL STATUS	sndsEndMemInit		();

/*
 * Declare our function table.  This is static across all driver
 * instances.
 */

LOCAL NET_FUNCS endFuncTable =
    {
    (STATUS (*) (END_OBJ*))sndsEndStart,				/* Function to start the device. */
    (STATUS (*) (END_OBJ*))sndsEndStop,				/* Function to stop the device. */
    (STATUS (*) (END_OBJ*))sndsEndUnload,				/* Unloading function for the driver. */
    (int (*) (END_OBJ*, int, caddr_t))sndsEndIoctl,				/* Ioctl function for the driver. */
	(STATUS (*) (END_OBJ* , M_BLK_ID))sndsEndSend,				/* Send function for the driver. */
    (STATUS (*) (END_OBJ*, char*))sndsEndMCastAdd,			/* Multicast address add function for the driver. */
    (STATUS (*) (END_OBJ*, char*))sndsEndMCastDel,			/* Multicast address delete function for the driver. */
    (STATUS (*) (END_OBJ*, MULTI_TABLE*))sndsEndMCastGet,			/* Multicast table retrieve function for the driver. */
    (STATUS (*) (END_OBJ*, M_BLK_ID))sndsEndPollSend,			/* Polling send function for the driver. */
    (STATUS (*) (END_OBJ*, M_BLK_ID))sndsEndPollRcv,				/* Polling receive function for the driver. */
    endEtherAddressForm,        /* Put address info into a packet.  */
    endEtherPacketDataGet,      /* Get a pointer to packet data. */
    endEtherPacketAddrGet       /* Get packet addresses. */
    };

/*******************************************************************************
*
* sndsEndLoad - initialize the driver and device
*
* This routine initializes the driver and the device to the operational state.
* All of the device specific parameters are passed in the initString.
*
* The string contains the target specific parameters like this:
*
* "<unit>:<Speed>:<duplex>:<autoneg>"
*
* RETURNS: An END object pointer or NULL on error.
*/

END_OBJ* sndsEndLoad
    (
    char* initString		/* String to be parsed by the driver. */
    )
    {
    END_DEVICE 	*pDrvCtrl;

#if 0
    ENDLOGMSG (("Loading sndsEndEnd...\n", 1, 2, 3, 4, 5, 6));
#endif

	if (initString[0] == NULL)
	{
		strcpy (initString, "secEnd");
		return (END_OBJ *)0;
	}

	/* allocate the device structure */

    pDrvCtrl = (END_DEVICE *)calloc (sizeof (END_DEVICE), 1);
    if (pDrvCtrl == NULL)
		goto errorExit;

    /* parse the init string, filling in the device structure */

    if (sndsEndParse (pDrvCtrl, initString) == ERROR)
		goto errorExit;

    pDrvCtrl->ivecBdmaTx = INT_LVL_BDMATx;
    pDrvCtrl->ivecBdmaRx = INT_LVL_BDMARx;
    pDrvCtrl->ivecMacTx = INT_LVL_MACTx;
    pDrvCtrl->ivecMacRx = INT_LVL_MACRx;

    /* Ask the BSP to provide the ethernet address. */

    SYS_ENET_ADDR_GET(pDrvCtrl);

	strcpy (pDrvCtrl->end.devObject.name, "secEnd");
	strcpy (pDrvCtrl->end.devObject.description, "Samsung SNDS100 END Driver");

   /* initialize the END and MIB2 parts of the structure */

    /*
     * The M2 element must come from m2Lib.h 
     * This sndsEnd is set up for a DIX type ethernet device.
     */
    if (END_OBJ_INIT (&pDrvCtrl->end, (DEV_OBJ *)pDrvCtrl, "secEnd",
                      pDrvCtrl->unit, &endFuncTable,
                      "Samsung SNDS100 END Driver") == ERROR
     || END_MIB_INIT (&pDrvCtrl->end, M2_ifType_ethernet_csmacd,
                      &pDrvCtrl->enetAddr[0], 6, ETHERMTU,
                      END_SPEED)
		    == ERROR)
	goto errorExit;

    /* Perform memory allocation/distribution */

    if (sndsEndMemInit (pDrvCtrl) == ERROR)
		goto errorExit;

    /* reset and reconfigure the device */
    sndsEndConfig (pDrvCtrl);

    /* set the flags to indicate readiness */
    END_OBJ_READY (&pDrvCtrl->end, IFF_NOTRAILERS | IFF_BROADCAST | IFF_MULTICAST);
    return (&pDrvCtrl->end);

	errorExit:
    if (pDrvCtrl != NULL)
		free ((char *)pDrvCtrl);

    return NULL;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区**美女毛片| 成人黄色大片在线观看| 高清在线观看日韩| 欧美精品vⅰdeose4hd| 中文字幕欧美激情一区| 日韩精品免费视频人成| fc2成人免费人成在线观看播放| 欧美夫妻性生活| 亚洲美女电影在线| 成人国产免费视频| 欧美精品一区二区三区蜜臀| 午夜精品视频一区| 一本大道久久a久久精品综合| 久久久99免费| 久久97超碰色| 欧美一区二区大片| 午夜精品福利一区二区三区av| 99久久精品国产麻豆演员表| 久久久久久久免费视频了| 免费成人av在线播放| 欧美日韩国产免费| 亚洲自拍偷拍图区| 日本韩国一区二区三区| 中文字幕综合网| 成人动漫一区二区三区| 久久网站热最新地址| 美女视频免费一区| 91精品国产一区二区三区蜜臀| 亚洲一二三区在线观看| 91美女片黄在线观看| 国产精品久久久久久久久晋中| 国产电影精品久久禁18| 国产三级欧美三级日产三级99| 六月婷婷色综合| 欧美变态凌虐bdsm| 国产麻豆精品视频| 国产日韩欧美高清在线| 成人不卡免费av| 中文字幕在线观看不卡视频| 99天天综合性| 亚洲国产精品一区二区www在线| 欧美视频一区二区三区在线观看| 一区二区在线观看免费| 欧美少妇xxx| 美女视频黄 久久| 久久精品一区八戒影视| aaa欧美色吧激情视频| 亚洲美女视频在线观看| 欧美精品自拍偷拍动漫精品| 欧美a级理论片| 久久久久久久久久看片| 99热这里都是精品| 亚洲午夜激情av| 日韩欧美一区二区视频| 国产永久精品大片wwwapp| 国产精品伦一区二区三级视频| 色综合天天综合狠狠| 日韩精品成人一区二区三区| 日韩免费成人网| 大胆欧美人体老妇| 亚洲第一成年网| 婷婷国产在线综合| 蜜臀a∨国产成人精品| 精品日本一线二线三线不卡| 激情综合网天天干| 亚洲色图色小说| 欧美精品久久99久久在免费线| 久久99久久99小草精品免视看| 日韩精品影音先锋| 成人av电影免费在线播放| 亚洲一区二区三区四区不卡| 精品国产乱码久久久久久1区2区 | 看片的网站亚洲| 国产精品日日摸夜夜摸av| 欧美日韩国产免费一区二区| 国产在线乱码一区二区三区| 亚洲色图视频免费播放| 欧美成人女星排名| 在线观看亚洲精品视频| 国产成人免费av在线| 亚洲va欧美va国产va天堂影院| 久久久久久久久久久久电影| 欧美体内she精高潮| 成人动漫在线一区| 韩国v欧美v日本v亚洲v| 亚洲成a人片综合在线| 国产精品视频一区二区三区不卡| 欧美一区二区三区日韩视频| 91麻豆国产在线观看| 国产一区二区在线电影| 日本特黄久久久高潮| 亚洲精选一二三| 国产精品久久久久久户外露出 | 91福利视频久久久久| 久久99精品久久久| 石原莉奈在线亚洲二区| 亚洲免费资源在线播放| 国产精品免费丝袜| 久久亚洲欧美国产精品乐播| 91精品国产福利在线观看| 欧美唯美清纯偷拍| 日本高清免费不卡视频| www.色精品| 99久久夜色精品国产网站| 成人精品视频.| 国产成人精品免费网站| 国产精品一区二区三区乱码 | 亚洲自拍偷拍欧美| 亚洲精品乱码久久久久久| 中文字幕一区二| 国产精品成人免费精品自在线观看 | 中文字幕精品三区| 综合激情成人伊人| 国产精品第五页| 亚洲欧洲无码一区二区三区| 亚洲国产精品ⅴa在线观看| 久久影院午夜片一区| 精品久久久久久久久久久久久久久久久| 欧美日韩精品三区| 91精品欧美久久久久久动漫| 正在播放一区二区| 日韩视频国产视频| 精品国产免费人成在线观看| 久久综合九色欧美综合狠狠| 26uuu成人网一区二区三区| 久久精品这里都是精品| 国产欧美日韩亚州综合 | 日韩精品一区二区三区视频| 91精品国产乱码| 欧美成人免费网站| 国产欧美日韩三区| 亚洲综合图片区| 麻豆精品一区二区av白丝在线| 狠狠色丁香久久婷婷综| 成人午夜免费视频| 欧美三级电影在线看| 日韩一区二区在线观看视频| 欧美不卡在线视频| 综合久久给合久久狠狠狠97色| 一区二区三区免费观看| 人妖欧美一区二区| 国产成人免费在线观看| 色香色香欲天天天影视综合网| 欧美另类久久久品| 久久久五月婷婷| 一区二区在线电影| 免费成人在线观看| www.亚洲在线| 91精品国产欧美日韩| 国产精品麻豆久久久| 日韩国产欧美三级| 成人午夜在线视频| 日韩一区二区三区高清免费看看| 国产欧美一区二区精品忘忧草 | 亚洲精品国产高清久久伦理二区| 偷拍自拍另类欧美| 成人精品免费看| 欧美一区二区在线播放| 国产精品网站导航| 日本特黄久久久高潮| 91一区二区三区在线播放| 日韩一区和二区| 亚洲一区二区视频在线观看| 国产成人久久精品77777最新版本| 91精品91久久久中77777| 欧美成人一区二区| 亚洲图片欧美一区| av在线不卡电影| 久久男人中文字幕资源站| 亚洲伊人伊色伊影伊综合网 | 日本成人超碰在线观看| 99精品视频在线观看免费| 久久综合狠狠综合| 欧美aaaaa成人免费观看视频| 91一区在线观看| 国产精品美女久久久久av爽李琼| 蜜臀av在线播放一区二区三区| 91在线国产福利| 国产精品毛片久久久久久久| 精品一区二区三区蜜桃| 这里只有精品电影| 视频一区二区欧美| 在线观看成人小视频| 亚洲视频电影在线| 波多野结衣中文一区| 国产蜜臀97一区二区三区| 久久99这里只有精品| 日韩一区二区三区免费观看| 天天色图综合网| 欧美精品成人一区二区三区四区| 亚洲黄色免费电影| 日本韩国欧美一区二区三区| 综合av第一页| 色吧成人激情小说| 一区av在线播放| 欧美在线|欧美| 亚洲v精品v日韩v欧美v专区 | 三级不卡在线观看| 欧美美女一区二区三区| 视频一区视频二区在线观看|