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

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

?? zl5011xdpr.c

?? Zalink50114----TDMoIP芯片驅(qū)動(dòng)源碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*******************************************************************************
*
*  File name:              zl5011xDpr.c
*
*  Version:                20
*
*  Author:                 PJE
*
*  Date created:           09/09/2002
*
*  Copyright 2002, 2003, 2004, 2005, Zarlink Semiconductor Limited.
*  All rights reserved.
*
*  Module Description:
*     This module is for the high level ISR functions which the user may wish to adapt
*     for the specific application.
*
*
*  Revision History:
*
*  Rev:  Date:       Author:  Comments:
*  1     25/09/2002  PJE      initial version
*  2     26/09/2002  PJE      new zl5011xIsrNoAppnInterruptSoFar() & zl5011xIsrNoApi..
*  3     03/10/2002  DJA      ZL5011X_TRACE messages fixed up
*                             File header updated
*  4     03/10/2002  PJE      code reviewed with DJA
*  5     24/10/2002  PJE      API tidy up
*  6     31/10/2002  MRC      Added variants + minor fixes
*  7     19/11/2002  PJE      Added CET hook
*  8     22/11/2002  PJE      API tidy up // COMMENTS
*  9     11/12/2002  PJE      API tidy up COMMENTS
*  10    03/04/2003  MRC      Moved CET to the api interrupt + other changes
*  11    10/04/2003  MRC      Changed interrupt reporting and enabling
*  12    22/05/2003  MRC      Tidied up interrupt fns
*  13    11/06/2003  DJA      Performed pre-audit actions
*  14    26/07/2004  MRC      Fixed some compiler warnings
*  15    26/08/2004  MRC      Added PW status byte support
*  16    20/10/2004  APL      Cast OS_ERROR to prevent a possible compiler warning
*  17    16/11/2004  MRC      Shortened task label
*  18    07/03/2005  APL      Removed unused code
*  19    19/04/2005  MRC      Improved interrupt string routine
*  20    02/06/2005  MRC      Added function to initialise PW polling
*
*******************************************************************************/

/*****************   INCLUDE FILES   ******************************************/

#include "zl5011xInterrupts.h"
#include "zl5011xDpr.h"

/*****************   # DEFINES   **********************************************/

/*****************   STATIC FUNCTION DECLARATIONS   ***************************/

/*****************   STATIC GLOBAL VARIABLES   ********************************/

typedef struct
{
   zl5011xIsrSourcesE  intSrc;
   char     *text;
} zl5011xDprInterruptStrS;

zl5011xDprInterruptStrS zl5011xDprInterruptStr[] =
{
   {9999, "ZL5011X_UNKNOWN_INTERRUPT"},
   {ZL5011X_NO_INTERRUPT, "ZL5011X_NO_INTERRUPT"},
   {ZL5011X_WAN_TX_ERROR_OVERFLOW_INTERRUPT, "ZL5011X_WAN_TX_ERROR_OVERFLOW_INTERRUPT"},
   {ZL5011X_WAN_TX_ERROR_INTERRUPT, "ZL5011X_WAN_TX_ERROR_INTERRUPT"},
   {ZL5011X_WAN_TX_INFO_OVERFLOW_INTERRUPT, "ZL5011X_WAN_TX_INFO_OVERFLOW_INTERRUPT"},
   {ZL5011X_WAN_TX_INFO_INTERRUPT, "ZL5011X_WAN_TX_INFO_INTERRUPT"},
   {ZL5011X_WAN_TX_QUEUE_INTERRUPT, "ZL5011X_WAN_TX_QUEUE_INTERRUPT"},
   {ZL5011X_WAN_TX_QUEUE_OVERFLOW_INTERRUPT, "ZL5011X_WAN_TX_QUEUE_OVERFLOW_INTERRUPT"},
   {ZL5011X_WAN_TX_GRANULES_INTERRUPT, "ZL5011X_WAN_TX_GRANULES_INTERRUPT"},
   {ZL5011X_WAN_RX_ERROR_INTERRUPT, "ZL5011X_WAN_RX_ERROR_INTERRUPT"},
   {ZL5011X_WAN_RX_OVERFLOW_INTERRUPT, "ZL5011X_WAN_RX_OVERFLOW_INTERRUPT"},
   {ZL5011X_WAN_RX_TASK_OVERFLOW_INTERRUPT, "ZL5011X_WAN_RX_TASK_OVERFLOW_INTERRUPT"},
   {ZL5011X_RTP_STATS_INTERRUPT, "ZL5011X_RTP_STATS_INTERRUPT"},
   {ZL5011X_WAN_CLK_INTERRUPT, "ZL5011X_WAN_CLK_INTERRUPT"},
   {ZL5011X_MEMORY_PARITY_INTERRUPT, "ZL5011X_MEMORY_PARITY_INTERRUPT"},
   {ZL5011X_MAC_IF_INTERRUPT, "ZL5011X_MAC_IF_INTERRUPT"},
   {ZL5011X_PACKET_TX_INTERRUPT, "ZL5011X_PACKET_TX_INTERRUPT"},
   {ZL5011X_PACKET_RX_INTERRUPT, "ZL5011X_PACKET_RX_INTERRUPT"},
   {ZL5011X_TASK_MSG_INTERRUPT, "ZL5011X_TASK_MSG_INTERRUPT"},
   {ZL5011X_GRANULE_INTERRUPT, "ZL5011X_GRANULE_INTERRUPT"},
   {ZL5011X_HOST_OVERFLOW_INTERRUPT, "ZL5011X_HOST_OVERFLOW_INTERRUPT"},
   {ZL5011X_HOST_GRANULES_INTERRUPT, "ZL5011X_HOST_GRANULES_INTERRUPT"},
   {ZL5011X_HOST_DMA_RX_INTERRUPT, "ZL5011X_HOST_DMA_RX_INTERRUPT"}
};

/*****************   EXPORTED GLOBAL VARIABLES   ******************************/

/* Sempahore Ids */
OS_SEM_ID zl5011xIsrSemId = OS_SEM_INVALID;

/* Message Q Ids */
OS_MSG_Q_ID zl5011xIsrMsgQId = OS_MSG_Q_INVALID;

/* Task Ids */
OS_TASK_ID zl5011xIsrTaskId = (OS_TASK_ID)NULL;
OS_TASK_ID zl5011xDprTaskId = (OS_TASK_ID)NULL;
OS_TASK_ID zl5011xIsrPwTaskId = (OS_TASK_ID)NULL;

/*****************   EXPORTED FUNCTION DEFINTIONS   ***************************/

/*******************************************************************************

 Function:
    zl5011xIsrInitialiseStructInit

 Description: stub function for forward compatibility.

 Inputs:
   zl5011xParams      Pointer to the structure for this device instance
   par               Pointer to parameter structure

 Structure Inputs:
   None

 Outputs:

 Returns:
    zlStatusE

 Remarks:

*******************************************************************************/

zlStatusE zl5011xIsrInitialiseStructInit(zl5011xParamsS *zl5011xParams,
      zl5011xIsrInitialiseS *par)
{
   zlStatusE status = ZL5011X_OK;

   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_ISR_FN_ID,
            "zl5011xIsrInitialiseStructInit: ",
            0, 0, 0, 0, 0, 0);

      par->apiPhysIntr = (Uint32T)ZL5011X_INVALID;
      par->appPhysIntr = (Uint32T)ZL5011X_INVALID;
   }

   return (status);
}

/*******************************************************************************

 Function:
    zl5011xIsrInitialise

 Description:
   This adds the device structure to the table of devices supported by this
   interrupt. Table is a global, kept in another module.
   If the interrupt is not currently active (determined by a static in the
   interrupt routines), then sets up the vector and enables interrupt operation,
   but, in the case of the application, it disables (masks) all individual
   interrupts.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to parameter structure containing:

  Structure Inputs:
   apiPhysIntr    interrupt number to use for the API interrupt - that is
                  used to maintain device statistics and clock recovery.
                  May be left as initialised to disable the interrupt.
   appPhysIntr    interrupt number to use for error reporting to the application.
                  May be left as initialised to disable the interrupt.

 Outputs:
   None

 Returns:
   zlStatusE

 Remarks:

*******************************************************************************/

zlStatusE zl5011xIsrInitialise(zl5011xParamsS *zl5011xParams,
      zl5011xIsrInitialiseS *par)
{
   zlStatusE status = ZL5011X_OK;
   /*OS_STATUS osStatus= 0;*/
   Uint32T index;
   zl5011xIsrDeleteS isrDelete;
   /*VOIDFUNCPTR *vector;*/

   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrInitialise: apiInt %d, appInt %d",
            par->apiPhysIntr, par->appPhysIntr, 0, 0, 0, 0);

      if ((zl5011xIsrAppIntNum != (Uint32T)ZL5011X_INVALID) || (zl5011xIsrApiIntNum != (Uint32T)ZL5011X_INVALID))
      {
         /* if either interrupt has already been enabled then bomb out */
         status = ZL5011X_INTERRUPTS_RUNNING;
      }
   }

   if (status == ZL5011X_OK)
   {
      /* clear out the device table before setting up the interrupts */
      for (index = 0; index < ZL5011X_ISR_MAX_NUMBER_DEVICES; index++)
      {
         zl5011xIsrDeviceTable[index]= NULL;
      }
   }
#if 0 
   /* set up the application ISR things if an interrupt number has been given */
   if (par->appPhysIntr != (Uint32T)ZL5011X_INVALID)
   {
      if (status == ZL5011X_OK)
      {
         /* Create the 'zl5011xIsrSemId' semaphore if it does not already exist */
         if (zl5011xIsrSemId == OS_SEM_INVALID)
         {
            zl5011xIsrSemId = OS_SEMA4_CREATE(OS_SEM_Q_PRIORITY,0);
         }
         else
         {
            ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrInitialise: semaphore already exists", 0,0,0,0,0,0);
         }

         if (zl5011xIsrSemId == OS_SEM_INVALID)
         {
            status = ZL5011X_RTOS_SEMA4_CREATE_FAIL;
         }
      }

      if (status == ZL5011X_OK)
      {
         /* Create the 'zl5011xIsrMsgQId' message queue if it does not already exist */
         if (zl5011xIsrMsgQId == OS_MSG_Q_INVALID)
         {
            zl5011xIsrMsgQId = OS_MSG_Q_CREATE(ZL5011X_DPR_MESSAGES, sizeof(zl5011xInterruptQueueDataS), OS_MSG_Q_PRIORITY);
         }
         else
         {
             ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrInitialise: message queue already exists", 0,0,0,0,0,0);
         }

         if (zl5011xIsrMsgQId == OS_MSG_Q_INVALID)
         {
            status = ZL5011X_RTOS_MSGQ_CREATE_FAIL;
         }
      }

      if (status == ZL5011X_OK)
      {
         if (zl5011xIsrTaskId == (OS_TASK_ID)NULL)
         {
            /* Create the 'isr' task */
            if ((zl5011xIsrTaskId = OS_TASK_SPAWN("zlIsrTask",
                  ZL5011X_ISR_TASK_PRIORITY,
                  OS_VX_NO_STACK_FILL,
                  ZL5011X_ISR_TASK_STACK_SIZE,
                  (FUNCPTR)zl5011xIsrTask,
                  0,0,0,0,0,0,0,0,0,0)) == (OS_TASK_ID)OS_ERROR)
            {
               status = ZL5011X_RTOS_TASK_CREATE_FAIL;
            }
         }
      }

      if (status == ZL5011X_OK)
      {
         if (zl5011xDprTaskId == (OS_TASK_ID)NULL)
         {
            /* Create the 'Dpr' task */
            if ((zl5011xDprTaskId = OS_TASK_SPAWN("zlDprTask",
                  ZL5011X_DPR_TASK_PRIORITY,
                  OS_VX_NO_STACK_FILL,
                  ZL5011X_DPR_TASK_STACK_SIZE,
                  (FUNCPTR)zl5011xDprTask,
                  0,0,0,0,0,0,0,0,0,0)) == (OS_TASK_ID)OS_ERROR)
            {
               status = ZL5011X_RTOS_TASK_CREATE_FAIL;
            }
         }
      }

      if (status == ZL5011X_OK)
      {
         if (zl5011xIsrPwTaskId == (OS_TASK_ID)NULL)
         {
            /* Create the PW task */
            if ((zl5011xIsrPwTaskId = OS_TASK_SPAWN("zlIsrPwTask",
                  ZL5011X_PW_TASK_PRIORITY,
                  OS_VX_NO_STACK_FILL,
                  ZL5011X_PW_TASK_STACK_SIZE,
                  (FUNCPTR)zl5011xIsrPwTask,
                  0,0,0,0,0,0,0,0,0,0)) == (OS_TASK_ID)OS_ERROR)
            {
               status = ZL5011X_RTOS_TASK_CREATE_FAIL;
            }
         }
      }

      if (status == ZL5011X_OK)
      {
         vector = (VOIDFUNCPTR *)par->appPhysIntr;
         osStatus = OS_INTERRUPT_CONNECT(vector, (VOIDFUNCPTR)zl5011xIsrConnect, 0);

         if (osStatus != OS_OK)
         {
            status = ZL5011X_RTOS_FAIL;
         }
         else
         {
            osStatus = OS_INTERRUPT_ENABLE(par->appPhysIntr);

            if (osStatus != OS_OK)
            {
               status = ZL5011X_RTOS_FAIL;
            }
         }
      }
   }

   /* set up the api ISR things if an interrupt number has been given */
   if (par->apiPhysIntr != (Uint32T)ZL5011X_INVALID)
   {
      if (status == ZL5011X_OK)
      {
         vector = (VOIDFUNCPTR *)par->apiPhysIntr;
         osStatus = OS_INTERRUPT_CONNECT(vector, (VOIDFUNCPTR)zl5011xIsrApiHandler, 0);

         if (osStatus != OS_OK)
         {
            status = ZL5011X_RTOS_FAIL;
         }
         else
         {
            osStatus = OS_INTERRUPT_ENABLE(par->apiPhysIntr);

            if (osStatus != OS_OK)
            {
               status = ZL5011X_RTOS_FAIL;
            }
         }
      }
   }
#endif
   if (status != ZL5011X_OK)
   {
      /* if we failed because the interrupt had already been initialised then
         DO NOT delete it */
      if ((zl5011xIsrAppIntNum == (Uint32T)ZL5011X_INVALID) && (zl5011xIsrApiIntNum == (Uint32T)ZL5011X_INVALID))
      {
         ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrInitialise: FAILED to initialise", 0, 0, 0, 0, 0, 0);

         /* temporarily set the global interrupt values - so that they
            can then be cleared up */
         zl5011xIsrApiIntNum = par->apiPhysIntr;
         zl5011xIsrAppIntNum = par->appPhysIntr;

         /* Oops something wrong here, clear up before exit */
         if (zl5011xIsrDeleteStructInit(zl5011xParams, &isrDelete) == ZL5011X_OK)
         {
            (void)zl5011xIsrDelete(zl5011xParams, &isrDelete);
         }
      }
   }
   else
   {
      zl5011xIsrApiIntNum = par->apiPhysIntr;
      zl5011xIsrAppIntNum = par->appPhysIntr;
   }

   return (status);
}

/*******************************************************************************

 Function:
    zl5011xIsrDeleteStructInit

 Description:
   stub function for forward compatibility.

 Inputs:
   zl5011xParams      Pointer to the structure for this device instance
   par               Pointer to parameter structure

 Structure Inputs:
   None

 Outputs:

 Returns:
   zlStatusE

 Remarks:

*******************************************************************************/

zlStatusE zl5011xIsrDeleteStructInit(zl5011xParamsS *zl5011xParams, zl5011xIsrDeleteS *par)
{
   zlStatusE status = ZL5011X_OK;

   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_ISR_FN_ID,
            "zl5011xIsrDeleteStructInit:",
            0, 0, 0, 0, 0, 0);
   }

   return (status);
}

/*******************************************************************************

 Function:
    zl5011xIsrDelete

 Description:
   cleans up any system resources created by the  zl5011xIsrInitialise() routine.

 Inputs:
   zl5011xParams      Pointer to the structure for this device instance
   par               Pointer to parameter structure

 Outputs:
   None

 Returns:
   zlStatusE

 Remarks:

*******************************************************************************/

zlStatusE zl5011xIsrDelete(zl5011xParamsS *zl5011xParams, zl5011xIsrDeleteS *par)
{
   zlStatusE status = ZL5011X_OK;

   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_ISR_FN_ID,
            "zl5011xIsrDelete: ",
            0, 0, 0, 0, 0, 0);
   }

   if (status == ZL5011X_OK)
   {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产老肥熟一区二区三区| 成人国产亚洲欧美成人综合网| 久久久久久久久久久久久久久99 | 国产精品欧美一区喷水| 欧美四级电影网| 国产不卡视频在线观看| 午夜精品久久一牛影视| 国产精品国产自产拍高清av| 精品久久久久久久人人人人传媒| 色婷婷av一区二区三区大白胸| 国产一区二区三区av电影| 亚洲制服丝袜在线| 最新国产の精品合集bt伙计| 精品国产乱码久久久久久夜甘婷婷| 在线视频中文字幕一区二区| 成人av网站在线观看免费| 九九国产精品视频| 日本午夜精品一区二区三区电影| 亚洲欧美一区二区三区国产精品| 久久久久久久网| 日韩精品一区二区三区视频在线观看 | 亚洲国产精品久久久男人的天堂| 亚洲国产激情av| 久久久久成人黄色影片| 欧美成人午夜电影| 欧美一区永久视频免费观看| 欧美三级午夜理伦三级中视频| 不卡一卡二卡三乱码免费网站| 国模娜娜一区二区三区| 美女一区二区久久| 麻豆精品新av中文字幕| 日本va欧美va瓶| 日本人妖一区二区| 美女视频黄 久久| 免费在线观看一区二区三区| 日韩精品一二三区| 日本午夜精品一区二区三区电影| 日韩中文字幕不卡| 另类综合日韩欧美亚洲| 久久精品国产77777蜜臀| 免费在线观看成人| 黄色成人免费在线| 国产成人在线看| 成人午夜电影小说| 99re6这里只有精品视频在线观看| 成人少妇影院yyyy| 91小视频免费观看| 欧美午夜免费电影| 91麻豆精品国产91久久久久| 欧美一区二区女人| 日韩精品专区在线影院重磅| 久久综合99re88久久爱| 欧美激情一区二区在线| **网站欧美大片在线观看| 亚洲人成网站色在线观看| 一区二区在线观看视频| 亚欧色一区w666天堂| 蜜桃一区二区三区在线| 国产在线视频不卡二| fc2成人免费人成在线观看播放 | 亚洲欧洲无码一区二区三区| 亚洲日本丝袜连裤袜办公室| 亚洲 欧美综合在线网络| 蜜桃久久av一区| 顶级嫩模精品视频在线看| av亚洲精华国产精华| 欧美三级电影网| 欧美精品一区二区久久婷婷| 中文字幕日韩av资源站| 五月天中文字幕一区二区| 国产自产v一区二区三区c| 99综合电影在线视频| 欧美群妇大交群中文字幕| 久久综合国产精品| 亚洲一区二区三区在线| 国产在线看一区| 欧美在线视频不卡| 久久蜜桃av一区二区天堂 | 欧美一区二区精品| 久久久综合激的五月天| 亚洲综合偷拍欧美一区色| 久久99精品久久久久久久久久久久| 成人高清视频在线| 欧美丰满嫩嫩电影| 国产精品久久久久三级| 日韩va亚洲va欧美va久久| 丁香桃色午夜亚洲一区二区三区| 欧美三级电影精品| 国产精品国产三级国产普通话99 | 国产精品伦理一区二区| 亚洲成人中文在线| 成人一道本在线| 欧美一区二区人人喊爽| 亚洲欧美色综合| 国产一区在线精品| 色综合久久久久综合体| 精品成人一区二区| 性久久久久久久久久久久| 成人福利视频网站| 欧美成人一区二区三区在线观看| 一区二区三区四区视频精品免费| 国产精品1024| 日韩久久久久久| 亚洲不卡一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 日韩精品一区二区三区中文精品| 亚洲一区二区三区中文字幕在线 | 色哟哟在线观看一区二区三区| 精品国产制服丝袜高跟| 亚洲国产综合视频在线观看| 成熟亚洲日本毛茸茸凸凹| 日韩欧美你懂的| 天天综合天天综合色| 色综合中文字幕国产| 久久精品视频一区二区| 久久精品国产久精国产| 欧美男男青年gay1069videost| 亚洲日本va午夜在线电影| 成人午夜在线播放| 国产人久久人人人人爽| 国产一区二区三区免费播放| 欧美一级欧美三级| 日韩精品亚洲一区| 884aa四虎影成人精品一区| 亚洲午夜日本在线观看| 色综合久久综合中文综合网| 中文字幕色av一区二区三区| 成人午夜碰碰视频| 久久久久久久久久美女| 欧美日本在线一区| 亚洲国产日日夜夜| 欧美在线不卡视频| 亚洲一区免费视频| 欧洲精品在线观看| 亚洲图片一区二区| 欧美福利视频导航| 久久99久久99| 精品国产91久久久久久久妲己 | 91麻豆视频网站| 一区二区三区在线播| 欧美亚洲免费在线一区| 亚洲午夜精品17c| 欧美一区在线视频| 国产中文字幕精品| 国产精品久久久久久久久搜平片 | 亚洲人精品午夜| 91久久免费观看| 亚洲风情在线资源站| 欧美高清精品3d| 精品影视av免费| 国产精品国模大尺度视频| 成人黄色在线视频| 亚洲综合自拍偷拍| 在线综合+亚洲+欧美中文字幕| 另类专区欧美蜜桃臀第一页| 久久久激情视频| 99精品视频一区二区三区| 一区二区三区在线观看国产| 欧美高清精品3d| 国产精品一区二区不卡| 国产精品久久网站| 欧美日韩亚洲综合一区| 青青草成人在线观看| 国产亚洲精品超碰| 91成人国产精品| 美国av一区二区| 国产精品国产三级国产有无不卡 | 在线亚洲高清视频| 久久国产欧美日韩精品| 国产日韩欧美综合在线| 在线中文字幕一区| 久久91精品国产91久久小草| 国产精品免费人成网站| 欧美日韩亚州综合| 国产一区999| 亚洲一区二区三区四区五区黄| 日韩精品一区二区三区在线观看 | 不卡av电影在线播放| 性做久久久久久免费观看 | 一区二区三区在线免费视频 | 一区二区三区免费在线观看| 日韩亚洲欧美中文三级| 成人免费黄色大片| 婷婷中文字幕一区三区| 亚洲国产精品99久久久久久久久 | 91亚洲国产成人精品一区二三| 日本成人在线一区| 成人免费小视频| 精品久久久三级丝袜| 欧洲精品一区二区三区在线观看| 国产一区二区三区不卡在线观看 | 午夜久久电影网| 国产精品久久午夜夜伦鲁鲁| 日韩一区二区麻豆国产| 99re热这里只有精品免费视频| 久久精品国产亚洲aⅴ| 亚洲一区二区精品视频| 国产日本一区二区| 欧美tk—视频vk| 欧洲色大大久久|