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

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

?? s3c2510eth.c

?? s3c2510 VxWorks BSP包
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* s3c2510Eth.c - SAMSUNG S3C2510 Ethernet controller driver  */

/* Copyright 2002 SAMSUNG ELECTRONICS */

/*
modification history
--------------------
01a,08feb02,jmLee   created.
*/


#include "vxWorks.h"
#include "intLib.h"
#include "netLib.h"
#include "end.h"
#include "endLib.h"
#include "cacheLib.h"
#include "miiLib.h"
#include "errno.h"
#include "stdio.h"
#include "logLib.h"
#include "taskLib.h"

#include "drv/multi/s3c2510.h"
#include "config.h"
#include "drv/intrCtl/s3c2510Intr.h"
#include "s3c2510Eth.h"
#include "s3c2510Des.h"


#undef  DEBUG_TRACE
#define DEBUG_LOG(x, p1, p2, p3, p4, p5, p6) \
        logMsg(x, (int)(UINT32)(p1), (int)(UINT32)(p2), (int)(UINT32)(p3), (int)(UINT32)(p4), (int)(UINT32)(p5), (int)(UINT32)(p6))

#define RX_WAIT_MAX                     (CPLL_FREQ * 1000)  /* Rx completion timeout */
#define TX_WAIT_MAX                     (CPLL_FREQ * 1000)  /* Tx completion timeout */
#define MII_WAIT_MAX                    (CPLL_FREQ * 1000)  /* max delay for the MII operation */

#ifndef NSDELAY
#define NSDELAY(nsec)                                           \
{                                                               \
    volatile int nx;                                            \
    volatile int loop = (int)(((CPLL_FREQ * nsec) / 1000) + 1); \
                                                                \
    for (nx=0; nx<loop; nx++);                                  \
}
#endif  /* NSDELAY */


/* External */

IMPORT STATUS   sysSecEnetAddrGet(int unit, UCHAR* address);


/* Forward Function Declarations */

LOCAL STATUS    s3c2510EthInitPhy(ETH_DRV_CTRL *pDrvCtrl);
LOCAL STATUS    s3c2510EthAnRestart(ETH_DRV_CTRL *pDrvCtrl);
LOCAL STATUS    s3c2510EthMiiRead(ETH_DRV_CTRL *pDrvCtrl, UINT8 phyAddr, UINT8 regAddr, UINT16 *miiData);
LOCAL STATUS    s3c2510EthMiiWrite(ETH_DRV_CTRL *pDrvCtrl, UINT8 phyAddr, UINT8 regAddr, UINT16 miiData);
LOCAL void      s3c2510EthInitBD(ETH_DRV_CTRL *pDrvCtrl);
LOCAL void      s3c2510EthIntRx(ETH_DRV_CTRL *pDrvCtrl);
LOCAL void      s3c2510EthIntTx(ETH_DRV_CTRL *pDrvCtrl);
LOCAL void      s3c2510EthRxHandler(ETH_DRV_CTRL *pDrvCtrl);
LOCAL void      s3c2510EthTxHandler(ETH_DRV_CTRL *pDrvCtrl);

#ifdef  DEBUG_TRACE
LOCAL void      s3c2510EthHexDump(UCHAR *p, ULONG l);
#endif  /* DEBUG_TRACE */



/*******************************************************************************
*
* s3c2510EthInit - initialize S3C2510 Ethernet controller
*
* RETURNS: OK, or ERROR.
*/

STATUS s3c2510EthInit(
    ETH_DRV_CTRL *pDrvCtrl                                  /* pointer to driver structure */
    )
{
    int unit = pDrvCtrl->unit;

#ifdef  DEBUG_TRACE
    printf("s3c2510Eth%d Init\n", unit);
#endif  /* DEBUG_TRACE */

    if (unit == 0)
    {
        pDrvCtrl->intLvlRx = INT_LVL_ETH0RX;
        pDrvCtrl->intLvlTx = INT_LVL_ETH0TX;
        pDrvCtrl->intVecRx = INT_VEC_ETH0RX;
        pDrvCtrl->intVecTx = INT_VEC_ETH0TX;
    }
    else if (unit == 1)
    {
        pDrvCtrl->intLvlRx = INT_LVL_ETH1RX;
        pDrvCtrl->intLvlTx = INT_LVL_ETH1TX;
        pDrvCtrl->intVecRx = INT_VEC_ETH1RX;
        pDrvCtrl->intVecTx = INT_VEC_ETH1TX;
    }
    else
    {
        printf("s3c2510Eth%d Error: Invalid unit number\n", unit);

        return ERROR;
    }

    /* Disable BDMA/MAC. */
    s3c2510EthStop(pDrvCtrl);

    /* Enable peripheral clock. */
    *S3C2510_PCLKDIS &= ~(S3C2510_PCLKDIS_ETH0 << unit);

    /* Initialize PHY. */
    s3c2510EthInitPhy(pDrvCtrl);

    /* Reset BDMA. */
    *S3C2510_BRXCON(unit) = S3C2510_BRXCON_RESET;
    *S3C2510_BTXCON(unit) = S3C2510_BTXCON_RESET;

    /* Reset MAC. */
    *S3C2510_MACCON(unit) = S3C2510_MACCON_RESET;

    /* Initlalize Buffer Descriptor. */
    s3c2510EthInitBD(pDrvCtrl);

    /* Initlalize BDMA Receive Frame Size Register. */
    *S3C2510_BRXLEN(unit) = (SIZE_ETH_MDMA << S3C2510_BRXLEN_MFS_SHIFT) |
                            (SIZE_ETH_MDMA << S3C2510_BRXLEN_BS_SHIFT);

    /* Initialize BDMA RBD/TBD Start Address Register. */
    *S3C2510_BRXBDPTR(unit) = pDrvCtrl->rbdBase;
    *S3C2510_BTXBDPTR(unit) = pDrvCtrl->tbdBase;

    /* Initialize BDMA Rx/Tx Control Register. */
    *S3C2510_BRXCON(unit) = NBD_RBD_ETH |                   /* defined in smdk2510.h */
                            (SIZE_ETH_WA << S3C2510_BRXCON_WA_SHIFT);
    *S3C2510_BTXCON(unit) = NBD_TBD_ETH |                   /* defined in smdk2510.h */
                            S3C2510_BTXCON_SL_6;            /* Wait to Fill 6/8 of BDMA Tx Buffer */

    /* Initialize MAC Rx/Tx Control Register. */
    *S3C2510_MRXCON(unit) =
#if     (SIZE_ETH_CRC == 0)
                            S3C2510_MRXCON_STRIPCRC |       /* Strip CRC Value */
#endif  /* (SIZE_ETH_CRC > 0) */
                            0;
    *S3C2510_MTXCON(unit) = 0;

    /* Initialize BDMA-MAC Rx/Tx Interrupt Enable Register. */
    *S3C2510_BMRXINTEN(unit) = S3C2510_BMRXINTEN_BNOIE |    /* BDMA Rx Not Owner Interrupt Enable */
                               S3C2510_BMRXINTEN_BDONEIE;   /* BDMA Rx Done Interrupt Enable */
    *S3C2510_BMTXINTEN(unit) = S3C2510_BMTXINTEN_MCOMPIE;   /* MAC Tx Completion Interrupt Enable */

    /* Initialize MAC Control Register. */
    if (pDrvCtrl->l80225Status & L80225_STAT_FDX)
    {
        *S3C2510_MACCON(unit) = S3C2510_MACCON_FULLDUPLEX;  /* Full-Duplex Enable */
    }
    else
    {
        *S3C2510_MACCON(unit) = 0;
    }

    /* Get hardware address. */
    sysSecEnetAddrGet(unit, pDrvCtrl->IFADDR.phyAddress);

    /* Set hardware address. */
    s3c2510EthAddrSet(pDrvCtrl);

    /* Initialize CAM. First entry is reserved for our MAC address. */
    *S3C2510_CAMEN(unit) = 0x00000001;
    *S3C2510_CAMCON(unit) = S3C2510_CAMCON_COMPEN |         /* Compare Enable */
                            S3C2510_CAMCON_BROAD |          /* Broadcast Accept */
                            S3C2510_CAMCON_GROUP |          /* Group Accept */
                            S3C2510_CAMCON_STATION;         /* Station Accept */

    /* Initialize flags. */
    pDrvCtrl->bPolling   = FALSE;
    pDrvCtrl->bTxBlocked = FALSE;
    pDrvCtrl->bRxHandler = FALSE;
    pDrvCtrl->bTxHandler = FALSE;

    /* Clear status. */
    /* should be clear value one, jwchoi
    *S3C2510_BMRXSTAT(unit) = 0;
    *S3C2510_BMTXSTAT(unit) = 0;
    */
    /* Connect interrupt. */
    intConnect(pDrvCtrl->intVecRx, (VOIDFUNCPTR)s3c2510EthIntRx, (int)pDrvCtrl);
    intConnect(pDrvCtrl->intVecTx, (VOIDFUNCPTR)s3c2510EthIntTx, (int)pDrvCtrl);

    return OK;
}

/*******************************************************************************
*
* s3c2510EthInitPhy - initialize S3C2510 Ethernet PHY
*
* RETURNS: OK, or ERROR.
*/

STATUS s3c2510EthInitPhy(
    ETH_DRV_CTRL *pDrvCtrl                                  /* pointer to driver structure */
    )
{
    int unit = pDrvCtrl->unit;
    UINT8 phyAddr = (UINT8)(unit + 1);

#ifdef  DEBUG_TRACE
    printf("s3c2510Eth%d InitPhy\n", unit);
#endif  /* DEBUG_TRACE */

    /* Save PHY address. */
    pDrvCtrl->phyInfo.phyAddr = phyAddr;

    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_CTRL_REG,      &pDrvCtrl->PHYREGS.phyCtrl);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_STAT_REG,      &pDrvCtrl->PHYREGS.phyStatus);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_PHY_ID1_REG,   &pDrvCtrl->PHYREGS.phyId1);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_PHY_ID2_REG,   &pDrvCtrl->PHYREGS.phyId2);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_AN_ADS_REG,    &pDrvCtrl->PHYREGS.phyAds);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_AN_PRTN_REG,   &pDrvCtrl->PHYREGS.phyPrtn);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_AN_EXP_REG,    &pDrvCtrl->PHYREGS.phyExp);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_AN_NEXT_REG,   &pDrvCtrl->PHYREGS.phyNext);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, L80225_STAT_REG,   &pDrvCtrl->l80225Status);

#ifdef  ETH_AUTO_NEGOTIATION
    /* If link is down, abort auto negotiation. */
    if (pDrvCtrl->PHYREGS.phyPrtn)
    {
        s3c2510EthAnRestart(pDrvCtrl);
    }
#else   /* ETH_AUTO_NEGOTIATION */
    /* Initialize MII Control Register. */
    pDrvCtrl->PHYREGS.phyCtrl =
#ifndef ETH_10BT
                                MII_CR_100 |                /* 100T */
#endif  /* ETH_10BT */
#ifdef  ETH_FULL_DUPLEX
                                MII_CR_FDX |                /* Full-Duplex */
#endif  /* ETH_FULL_DUPLEX */
                                0;
    s3c2510EthMiiWrite(pDrvCtrl, phyAddr, MII_CTRL_REG, pDrvCtrl->PHYREGS.phyCtrl);

    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_STAT_REG, &pDrvCtrl->PHYREGS.phyStatus);
#endif  /* ETH_AUTO_NEGOTIATION */

    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_CTRL_REG,    &pDrvCtrl->PHYREGS.phyCtrl);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_AN_ADS_REG,  &pDrvCtrl->PHYREGS.phyAds);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_AN_PRTN_REG, &pDrvCtrl->PHYREGS.phyPrtn);
    s3c2510EthMiiRead(pDrvCtrl, phyAddr, L80225_STAT_REG, &pDrvCtrl->l80225Status);

     /* Connection speed. */
    if (pDrvCtrl->l80225Status & L80225_STAT_100)
    {
        pDrvCtrl->phyInfo.phySpeed = MII_100MBS;
    }
    else
    {
        pDrvCtrl->phyInfo.phySpeed = MII_10MBS;
    }

#ifdef  DEBUG_TRACE
    printf("    MII_CTRL_REG:       0x%04X\n", pDrvCtrl->PHYREGS.phyCtrl);
    printf("    MII_STAT_REG:       0x%04X\n", pDrvCtrl->PHYREGS.phyStatus);
    printf("    MII_AN_ADS_REG:     0x%04X\n", pDrvCtrl->PHYREGS.phyAds);
    printf("    MII_AN_PRTN_REG:    0x%04X\n", pDrvCtrl->PHYREGS.phyPrtn);
    printf("    L80225_STAT_REG:    0x%04X\n", pDrvCtrl->l80225Status);
#endif  /* DEBUG_TRACE */

    return OK;
}

/*******************************************************************************
*
* s3c2510EthAnRestart - restart auto negotiation
*
* RETURNS: OK, or ERROR.
*/

STATUS s3c2510EthAnRestart(
    ETH_DRV_CTRL *pDrvCtrl                                  /* pointer to driver structure */
    )
{
    UINT16 phyAddr = pDrvCtrl->phyInfo.phyAddr;
    int timeout = MII_WAIT_MAX;

    /* Perserve selector. */
    pDrvCtrl->PHYREGS.phyAds &= MII_ADS_SEL_MASK;

    /* Set appropriate options. */
    pDrvCtrl->PHYREGS.phyAds |=
#ifdef  ETH_10BT
                                MII_TECH_10BASE_T |         /* 10T half-duplex capable */
#endif  /* ETH_10BT */
#ifdef  ETH_FULL_DUPLEX
                                MII_TECH_100BASE_TX_FD |    /* 100TX-FX full-duplex capable */
#ifdef  ETH_10BT
                                MII_TECH_10BASE_FD |        /* 10T full-duplex capable */
#endif  /* ETH_10BT */
#endif  /* ETH_FULL_DUPLEX */
                                MII_TECH_100BASE_TX;        /* 100TX-FX half-duplex capable */

    /* Initialize Auto Negotiation Advertisement Register. */
    s3c2510EthMiiWrite(pDrvCtrl, phyAddr, MII_AN_ADS_REG, pDrvCtrl->PHYREGS.phyAds);

    /* Enable and Start Auto Negotiation. */
    pDrvCtrl->PHYREGS.phyCtrl |= MII_CR_AUTO_EN |           /* Auto-Negotiation Enable */
                                 MII_CR_RESTART;            /* Restart Auto Negotiation */

    /* Start auto negotiation. */
    s3c2510EthMiiWrite(pDrvCtrl, phyAddr, MII_CTRL_REG, pDrvCtrl->PHYREGS.phyCtrl);

    /* Wait until start auto negotiation. */
    while (1)
    {
        s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_CTRL_REG, &pDrvCtrl->PHYREGS.phyCtrl);
        if (!(pDrvCtrl->PHYREGS.phyCtrl & MII_CR_RESTART))
        {
            break;
        }
    }

    /* Wait until complete auto negotiation. */
    while (1)
    {
        s3c2510EthMiiRead(pDrvCtrl, phyAddr, MII_STAT_REG, &pDrvCtrl->PHYREGS.phyStatus);
        if (pDrvCtrl->PHYREGS.phyStatus & MII_SR_AUTO_NEG)
        {
            break;
        }

        if (--timeout == 0)
        {
            printf("s3c2510Eth%d Error: MII auto negotiation timeout\n", pDrvCtrl->unit);

            return ERROR;
        }
    }

    return OK;
}

/**************************************************************************
*
* s3c2510EthMiiRead - read the MII interface
*
* This routine reads the register specified by <phyReg> in the PHY device whose
* address is <phyAddr>. The value read is returned in the location pointed to by
* <miiData>.
*
* RETURNS: OK, or ERROR.
*/

STATUS s3c2510EthMiiRead(
    ETH_DRV_CTRL *pDrvCtrl,                                 /* pointer to driver structure */
    UINT8 phyAddr,                                          /* the PHY being read */
    UINT8 regAddr,                                          /* the PHY's register being read */
    UINT16 *miiData                                         /* value read from the MII interface */
    )
{
    int unit = pDrvCtrl->unit;
    UINT16 val;
    int timeout = MII_WAIT_MAX;

#ifdef  DEBUG_TRACE
    printf("s3c2510Eth%d MiiRead, PHY%u, REG%u\n", unit, phyAddr, regAddr);
#endif  /* DEBUG_TRACE */

    val = (3 << S3C2510_STACON_MDCCLKRATE_SHIFT) |          /* MDC Clock Rate */
          (phyAddr << S3C2510_STACON_PHYADDR_SHIFT) |       /* PHY Address */
          (regAddr << S3C2510_STACON_PHYREGADDR_SHIFT) |    /* PHY Register Address */
          S3C2510_STACON_PHYREAD |                          /* Read */
          S3C2510_STACON_PHYBUSY;                           /* Start Operation */

    *S3C2510_STACON(unit) = val;

    /* Wait until complete operation. */
    while (1)
    {
        val = *S3C2510_STACON(unit);
        if (!(val & S3C2510_STACON_PHYBUSY))                /* End Operation */
        {
            break;
        }

        if (--timeout == 0)
        {
            printf("s3c2510Eth%d Error: MII read timeout\n", unit);

            return ERROR;
        }
    }

    *miiData = *S3C2510_STADATA(unit);

    return OK;
}

/**************************************************************************
*
* s3c2510EthMiiWrite - write to the MII register
*
* This routine writes the register specified by <phyReg> in the PHY device whose
* address is <phyAddr>, with the 16-bit value included in <miiData>.
*
* RETURNS: OK, or ERROR.
*/

STATUS s3c2510EthMiiWrite(
    ETH_DRV_CTRL *pDrvCtrl,                                 /* pointer to driver structure */
    UINT8 phyAddr,                                          /* the PHY being written */
    UINT8 regAddr,                                          /* the PHY's register being written */
    UINT16 miiData                                          /* value written to the MII interface */
    )
{
    int unit = pDrvCtrl->unit;
    UINT16 val;
    int timeout = MII_WAIT_MAX;

#ifdef  DEBUG_TRACE
    printf("s3c2510Eth%d MiiWrite, PHY%u, REG%u\n", unit, phyAddr, regAddr);
#endif  /* DEBUG_TRACE */

    *S3C2510_STADATA(unit) = miiData;

    val = (3 << S3C2510_STACON_MDCCLKRATE_SHIFT) |          /* MDC Clock Rate */
          (phyAddr << S3C2510_STACON_PHYADDR_SHIFT) |       /* PHY Address */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清www午色夜在线视频| 国产日韩欧美精品一区| 久久久久久免费| 一区二区三区 在线观看视频| 麻豆国产欧美一区二区三区| 不卡av在线网| 精品久久免费看| 亚洲五码中文字幕| 成人天堂资源www在线| 日韩精品专区在线| 午夜视黄欧洲亚洲| 成人综合婷婷国产精品久久蜜臀 | 有码一区二区三区| 国产激情偷乱视频一区二区三区| 欧美日韩欧美一区二区| 国产精品久久久久久久久快鸭| 极品瑜伽女神91| 欧美一级日韩不卡播放免费| 一区二区三区四区亚洲| 成人av在线网站| 久久精品人人爽人人爽| 精品无码三级在线观看视频| 91精品国产高清一区二区三区蜜臀 | 91麻豆国产自产在线观看| 国产性色一区二区| 国产精品一区二区黑丝| 日韩精品一区二区三区四区视频 | 男男视频亚洲欧美| 在线看不卡av| 亚洲国产精品一区二区久久 | 久久激情五月激情| 日韩一区二区不卡| 久久成人久久爱| 精品福利一区二区三区免费视频| 日韩黄色在线观看| 欧美一级黄色片| 美女视频黄 久久| 日韩一级完整毛片| 另类小说色综合网站| 欧美一卡二卡三卡| 国产精品一区二区视频| 国产日产欧美一区二区视频| 福利一区在线观看| 中文字幕亚洲不卡| 在线观看一区二区视频| 五月激情综合色| 日韩一区二区三区视频在线 | 国产网站一区二区| 高清在线成人网| 国产精品美女视频| 91麻豆高清视频| 性感美女久久精品| 日韩精品资源二区在线| 成人网男人的天堂| 亚洲一区二区三区四区在线| 91精品在线免费观看| 精品一区二区三区免费| 国产亚洲欧洲一区高清在线观看| 日本福利一区二区| 婷婷开心激情综合| 国产午夜亚洲精品理论片色戒 | 中文成人av在线| 色哟哟在线观看一区二区三区| 亚洲高清不卡在线观看| 精品免费一区二区三区| 国产高清在线观看免费不卡| 亚洲精品久久久久久国产精华液 | 在线观看日韩av先锋影音电影院| 三级亚洲高清视频| 国产精品视频你懂的| 欧美日韩色综合| 国产精品中文字幕欧美| 亚洲永久免费av| 国产视频亚洲色图| 欧美日韩成人高清| 成人激情免费网站| 蜜桃视频免费观看一区| 最新国产精品久久精品| 欧美大片在线观看一区二区| 一本到不卡免费一区二区| 麻豆视频观看网址久久| 亚洲精品欧美激情| 国产精品狼人久久影院观看方式| 欧美高清www午色夜在线视频| 99re这里都是精品| 国产一区二区精品久久99| 午夜av一区二区三区| 欧美激情一区二区三区全黄| 日韩欧美在线网站| 91成人在线精品| 丁香网亚洲国际| 日本免费在线视频不卡一不卡二| 日韩美女精品在线| 久久精品网站免费观看| 欧美一二三区在线观看| 欧美性生活久久| 91免费小视频| 成人av在线一区二区三区| 久久97超碰国产精品超碰| 婷婷成人综合网| 亚洲一区二区三区四区在线免费观看 | 欧美日韩一区国产| 91色在线porny| 懂色中文一区二区在线播放| 久久精品国产精品亚洲综合| 日韩和欧美一区二区| 亚洲一区二区高清| 亚洲一卡二卡三卡四卡五卡| 一区二区三区欧美久久| 亚洲日本在线a| 综合激情网...| 亚洲日本青草视频在线怡红院| 亚洲欧洲韩国日本视频| 中日韩av电影| 亚洲四区在线观看| 中文字幕亚洲欧美在线不卡| 亚洲欧洲日产国产综合网| 国产精品色在线观看| 国产目拍亚洲精品99久久精品| 久久嫩草精品久久久精品一| 久久久久久久免费视频了| 久久精品一区蜜桃臀影院| 久久久精品天堂| 日本一区二区三区久久久久久久久不| 久久综合久久综合久久综合| 久久人人超碰精品| 欧美国产成人在线| 亚洲天堂免费在线观看视频| 一区二区三区中文免费| 亚洲va欧美va国产va天堂影院| 日韩国产一二三区| 国内精品久久久久影院薰衣草| 国产高清一区日本| 成人黄色国产精品网站大全在线免费观看 | 国产精品乱人伦| 国产精品久久久久久久浪潮网站| 亚洲视频你懂的| 天天亚洲美女在线视频| 久久99蜜桃精品| 国产成人综合亚洲网站| 色偷偷久久一区二区三区| 69堂亚洲精品首页| 久久综合九色综合97婷婷| 亚洲欧洲日本在线| 日本中文字幕一区二区有限公司| 国产乱码精品1区2区3区| 99re热这里只有精品免费视频| 欧美日韩高清影院| 国产欧美日韩亚州综合| 亚洲综合在线电影| 国产一区二区三区在线观看免费 | 国产精品一区二区男女羞羞无遮挡| 91视频观看视频| 91精品一区二区三区久久久久久 | 久久一区二区三区国产精品| 1000精品久久久久久久久| 日本最新不卡在线| eeuss鲁片一区二区三区| 欧美欧美午夜aⅴ在线观看| 国产偷v国产偷v亚洲高清 | 中文字幕成人av| 亚洲国产aⅴ天堂久久| 国产99久久久久久免费看农村| 欧美午夜精品久久久久久超碰| 久久亚洲精精品中文字幕早川悠里| 亚洲欧美激情一区二区| 国产精品资源网站| 欧美男男青年gay1069videost | 亚洲国产日产av| 粉嫩嫩av羞羞动漫久久久| 制服丝袜日韩国产| 亚洲美女精品一区| 懂色一区二区三区免费观看| 91精品久久久久久久99蜜桃| 最新成人av在线| 粉嫩蜜臀av国产精品网站| 精品入口麻豆88视频| 亚洲五码中文字幕| 色综合视频一区二区三区高清| 精品国产亚洲一区二区三区在线观看| 一区二区三区四区不卡在线| 成人中文字幕在线| 国产日韩欧美一区二区三区乱码| 蜜臀99久久精品久久久久久软件| 欧美性猛交一区二区三区精品| 国产精品水嫩水嫩| 国产美女av一区二区三区| 日韩美女在线视频| 麻豆91小视频| 日韩一级黄色片| 日韩av电影天堂| 日韩一区二区高清| 美日韩黄色大片| 555www色欧美视频| 日韩精品一区第一页| 欧美日韩成人一区二区| 亚洲r级在线视频| 欧美挠脚心视频网站| 日韩成人av影视| 欧美一区二区三区性视频|