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

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

?? zl5011xpkq.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

 Remarks:
   None
*******************************************************************************/

zlStatusE zl5011xPkqSetGranuleThreshold(zl5011xParamsS *zl5011xParams,
                                       Uint8T portNumber,
                                       Uint8T queueNumber,
                                       Uint32T granuleThreshold)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T registerOffset;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID,
         "zl5011xPkqSetGranuleThreshold: Port %ld, Queue %ld, Threshold %ld",
         portNumber, queueNumber, granuleThreshold, 0, 0, 0);

   if ((granuleThreshold >= zl5011xParams->pkq.totalGranuleThreshold) ||
      (granuleThreshold > ZL5011X_PKQ_MAX_GRAN_THLD))
   {
      status = ZL5011X_PARAMETER_INVALID;
   }

   if (status == ZL5011X_OK)
   {
      /* check queue number is in range */
      if (queueNumber >= ZL5011X_PKQ_NUM_QUEUES)
      {
         status= ZL5011X_PARAMETER_INVALID;
      }
   }

   if (status == ZL5011X_OK)
   {
      /* Calculate register address */
      registerOffset = ZL5011X_PKQ_GTA0 +
            ((portNumber * ZL5011X_PKQ_NUM_QUEUES) + queueNumber) * sizeof(Uint32T);

      /* Set granule threshold */
      status = zl5011xWrite(zl5011xParams, registerOffset, granuleThreshold);
   }

   /* Store set up values in device structure */
   zl5011xParams->pkq.granuleThreshold[portNumber][queueNumber] = granuleThreshold;

   return (status);
}

/*******************************************************************************
 Function:
    zl5011xPkqSetThresholdMode

 Description:
   Sets the packet dropping mode for a particular queue.

 Inputs:
   zl5011xParams          Pointer to the structure for this device instance
   portNumber            LAN port number
   queueNumber           Queue number
   thresholdMode         ZL5011X_TRUE to drop packets when granule threshold is
                         exceeded. ZL5011X_FALSE to continue.

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None
*******************************************************************************/

zlStatusE  zl5011xPkqSetThresholdMode(zl5011xParamsS *zl5011xParams,
                                     Uint8T portNumber,
                                     Uint8T queueNumber,
                                     zl5011xBooleanE thresholdMode)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T bitMask, bits;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID,
         "zl5011xPkqSetThresholdMode: Port %ld, Queue %ld, Mode %ld",
         portNumber, queueNumber, thresholdMode, 0, 0, 0);

   if (status == ZL5011X_OK)
   {
      /* check queue number is in range */
      if (queueNumber >= ZL5011X_PKQ_NUM_QUEUES)
      {
         status= ZL5011X_PARAMETER_INVALID;
      }
   }

   if (status == ZL5011X_OK)
   {
     status = ZL5011X_CHECK_BOOLEAN(thresholdMode);
   }

   bitMask = ZL5011X_1BIT_MASK <<
         ((portNumber * ZL5011X_PKQ_NUM_QUEUES) + queueNumber);

   if (thresholdMode == ZL5011X_TRUE)
   {
      bits = bitMask;
   }
   else
   {
      bits = 0;
   }
   if (status == ZL5011X_OK)
   {
      /* control the queue dropping */
      status = zl5011xReadModWrite(zl5011xParams, ZL5011X_PKQ_QDER,
            bits, bitMask);
   }

   /* Store set up values in device structure */
   zl5011xParams->pkq.thresholdMode[portNumber][queueNumber] = thresholdMode;

   return (status);
}

/*******************************************************************************
 Function:
    zl5011xPkqSetTotalGranuleThreshold

 Description:
   Sets maximum granule memory allowed to be used for all of the queues.

 Inputs:
   zl5011xParams          Pointer to the structure for this device instance
   totalGranuleThreshold Total granule threshold for all queues.

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None
*******************************************************************************/

zlStatusE  zl5011xPkqSetTotalGranuleThreshold(zl5011xParamsS *zl5011xParams,
      Uint32T totalGranuleThreshold)
{
   zlStatusE status = ZL5011X_OK;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID,
         "zl5011xPkqSetTotalGranuleThreshold: Threshold %ld",
         totalGranuleThreshold, 0, 0, 0, 0, 0);

   if (totalGranuleThreshold >  ZL5011X_PKQ_MAX_GRAN_THLD)
   {
      status = ZL5011X_PARAMETER_INVALID;
   }

   if (status == ZL5011X_OK)
   {
      /* Set granule threshold */
      status = zl5011xWrite(zl5011xParams, ZL5011X_PKQ_TGTR, totalGranuleThreshold);

      /* Store set up values in device structure */
      zl5011xParams->pkq.totalGranuleThreshold = totalGranuleThreshold;
   }

   return (status);
}


/*******************************************************************************
 Function:
    zl5011xPkqSetTotalThresholdMode

 Description:
   Sets the packet dropping mode for all queues.

 Inputs:
   zl5011xParams         Pointer to the structure for this device instance
   totalThresholdMode   ZL5011X_TRUE to drop packets when total granule threshold
                        is exceeded. ZL5011X_FALSE to continue.

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None
*******************************************************************************/
zlStatusE  zl5011xPkqSetTotalThresholdMode(zl5011xParamsS *zl5011xParams,
            zl5011xBooleanE totalThresholdMode)
{
   zlStatusE status = ZL5011X_OK;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID,
         "zl5011xPkqSetTotalThresholdMode: mode %ld",
         totalThresholdMode, 0, 0, 0, 0, 0);

   status = ZL5011X_CHECK_BOOLEAN(totalThresholdMode);

   if (status == ZL5011X_OK)
   {
      if (totalThresholdMode == ZL5011X_TRUE)
      {
         /* Enable total threshold mode */
         status = zl5011xReadModWrite(zl5011xParams, ZL5011X_PKQ_QDER,
               ZL5011X_PKQ_TOTAL_THLD_MODE, ZL5011X_PKQ_TOTAL_THLD_MODE);
      }
      else
      {
         /* Disable total threshold mode */
         status = zl5011xReadModWrite(zl5011xParams, ZL5011X_PKQ_QDER,
               ~ZL5011X_PKQ_TOTAL_THLD_MODE, ZL5011X_PKQ_TOTAL_THLD_MODE);
      }
   }

   /* Store set up values in device structure */
   zl5011xParams->pkq.totalThresholdMode = totalThresholdMode;

   return (status);
}

/*******************************************************************************
 Function:
    zl5011xPkqSetMpidConnection

 Description:
   Sets the output queue on a per context basis. In the device, the mapping from
   context in the WAN Rx to MPID in the PKQ is a simple 1:1.
   16 further MPID's are also defined, for use in host Tx.

 Inputs:
   zl5011xParams          Pointer to the structure for this device instance
   mpid                  MPID number
   portNumber            LAN port number to be assigned to the MPID
   queueNumber           Queue number to be assigned to the MPID

 Outputs:
   None

 Returns:
   zlStatusE

 Remarks:
   None
*******************************************************************************/

zlStatusE  zl5011xPkqSetMpidConnection(zl5011xParamsS *zl5011xParams, Uint32T mpid,
                                       Uint8T portNumber,
                                       Uint8T queueNumber)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T data, bitMask, regAddress;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID,"zl5011xPkqSetMpidConnection: MPID %ld, Port %ld, Queue %ld",
         mpid, portNumber, queueNumber, 0, 0, 0);

   /* Check MPID is within range */
   if (mpid >= (ZL5011X_PKT_TX_NUM_CONTEXT_HEADERS + ZL5011X_PKT_TX_NUM_HOST_HEADERS))
   {
      status = ZL5011X_PARAMETER_INVALID;
   }

   /* Check enumerated parameters are within range */
   if (status == ZL5011X_OK)
   {
      /* check queue number is in range */
      if (queueNumber >= ZL5011X_PKQ_NUM_QUEUES)
      {
         status= ZL5011X_PARAMETER_INVALID;
      }
   }

   if (status == ZL5011X_OK)
   {
      /* Calculate register address in context table */
      regAddress = ZL5011X_PKQ_CONTEXT_TABLE +
            ((mpid / ZL5011X_PKQ_NUM_OF_CT_FIELDS) * sizeof(Uint32T));

      /* Calculate data and position of data to be written into context table */
      data = portNumber << ZL5011X_PKQ_PORT_SHIFT;
      data |= queueNumber;

      data = data << ((mpid % ZL5011X_PKQ_NUM_OF_CT_FIELDS) *
            ZL5011X_SIZE_OF_PORT_AND_QUEUE_FIELD);

      /* Enable bits to be written into context table word */
      bitMask = ZL5011X_4BIT_MASK << ((mpid % ZL5011X_PKQ_NUM_OF_CT_FIELDS) *
            ZL5011X_SIZE_OF_PORT_AND_QUEUE_FIELD);

      status = zl5011xReadModWrite(zl5011xParams, regAddress, data, bitMask);

      /* note the port and queue settings */
      zl5011xParams->pkq.wanRxPortNum[mpid] = portNumber;
      zl5011xParams->pkq.wanRxQueueNum[mpid] = queueNumber;
   }

   return (status);
}

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

 Function:
    zl5011xPkqGetMpidConnection

 Description:
   Gets the output port / queue on a per context basis.

 Inputs:
   zl5011xParams          Pointer to the structure for this device instance
   mpid                  MPID number

 Outputs:
   portNumber            LAN port number assigned to the MPID
   queueNumber           Queue number assigned to the MPID

 Returns:
   zlStatusE

 Remarks:
   None
*******************************************************************************/

zlStatusE  zl5011xPkqGetMpidConnection(zl5011xParamsS *zl5011xParams, Uint32T mpid,
                                       Uint8T *portNumber,
                                       Uint8T *queueNumber)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T data, bitMask, regAddress;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID,"zl5011xPkqGetMpidConnection: MPID %ld",
         mpid, 0, 0, 0, 0, 0);

   /* Check MPID is within range */
   if (mpid >= (ZL5011X_PKT_TX_NUM_CONTEXT_HEADERS + ZL5011X_PKT_TX_NUM_HOST_HEADERS))
   {
      status = ZL5011X_PARAMETER_INVALID;
   }

   if (status == ZL5011X_OK)
   {
      /* Calculate register address in context table */
      regAddress = ZL5011X_PKQ_CONTEXT_TABLE +
            ((mpid / ZL5011X_PKQ_NUM_OF_CT_FIELDS) * sizeof(Uint32T));

      /* Enable bits to be written into context table word */
      bitMask = ZL5011X_4BIT_MASK << ((mpid % ZL5011X_PKQ_NUM_OF_CT_FIELDS) *
            ZL5011X_SIZE_OF_PORT_AND_QUEUE_FIELD);

      status = zl5011xRead(zl5011xParams, regAddress, &data);

      /* Calculate data and position of data to be written into context table */
      data = data >> ((mpid % ZL5011X_PKQ_NUM_OF_CT_FIELDS) *
            ZL5011X_SIZE_OF_PORT_AND_QUEUE_FIELD);

      *portNumber = (Uint8T)(data >> ZL5011X_PKQ_PORT_SHIFT) & 0x3;
      *queueNumber = (Uint8T)data & 0x3;
   }

   return (status);
}

/*******************************************************************************
 Function:
    zl5011xPkqGetDropStatus

 Description:
   This function reads back the  interrupt status register

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance

 Outputs:
    ptr to Status value returned

 Returns:
    zlStatusE

 Remarks:

*******************************************************************************/
zlStatusE zl5011xPkqGetDropStatus(zl5011xParamsS *zl5011xParams,
                                Uint32T *pStatus)
{
   zlStatusE status = ZL5011X_OK;

   ZL5011X_TRACE(ZL5011X_PKQ_FN_ID, "zl5011xPkqGetDropStatus:",0, 0, 0, 0, 0, 0);

   if( pStatus== NULL)
   {
      status= ZL5011X_PARAMETER_INVALID;
   }
   if( status== ZL5011X_OK)
   {
      status = zl5011xRead(zl5011xParams, ZL5011X_PKQ_QDR, pStatus);
   }
   if( status== ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_PKC_FN_ID, "zl5011xPkqGetDropStatus: reads status 0x%.08lx",
                                                      *pStatus, 0, 0, 0, 0, 0);
   }
   return (status);

}



/*****************   END   ****************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区黄视频| 欧美午夜免费电影| 色呦呦一区二区三区| 欧美一区二区精品| 亚洲人精品一区| 国产在线国偷精品免费看| 色婷婷亚洲一区二区三区| 欧美精品一区二| 亚洲成人在线网站| 波多野结衣中文字幕一区| 欧美一区二区在线视频| 成人免费一区二区三区在线观看 | 亚洲美腿欧美偷拍| 狠狠狠色丁香婷婷综合激情 | 日本伊人色综合网| 99视频国产精品| 国产女人aaa级久久久级| 视频精品一区二区| 在线观看免费一区| 1024国产精品| va亚洲va日韩不卡在线观看| 久久综合av免费| 日本欧美韩国一区三区| 欧美视频在线一区二区三区| 亚洲免费电影在线| 97se亚洲国产综合在线| 国产精品天美传媒| 国产成人免费视频| 国产亚洲精品aa午夜观看| 极品瑜伽女神91| 精品国产三级a在线观看| 日本在线播放一区二区三区| 欧美一区欧美二区| 青青草91视频| 欧美变态tickling挠脚心| 午夜成人免费视频| 欧美日韩久久久久久| 五月天亚洲精品| 欧美一区二区三区视频免费播放 | 不卡大黄网站免费看| 国产欧美综合在线观看第十页| 国产真实乱偷精品视频免| 欧美sm极限捆绑bd| 国产一区二区三区久久久| 国产欧美日韩三级| youjizz国产精品| 亚洲欧美aⅴ...| 欧美日韩一区二区三区不卡| 日韩精品1区2区3区| 日韩午夜电影在线观看| 国产在线精品一区二区不卡了| 国产视频在线观看一区二区三区| 成人动漫一区二区| 亚洲六月丁香色婷婷综合久久 | 蜜桃av一区二区| 久久精品人人做人人爽人人| 91在线视频在线| 亚洲超碰精品一区二区| 日韩欧美一区二区在线视频| 国产一区在线看| 亚洲欧美日韩久久精品| 在线不卡欧美精品一区二区三区| 黄网站免费久久| 17c精品麻豆一区二区免费| 欧美日韩一区小说| 国产精品18久久久久久久久久久久 | 日韩一区二区中文字幕| 国产乱码一区二区三区| ㊣最新国产の精品bt伙计久久| 欧美日本精品一区二区三区| 国产精品自拍三区| 一区二区三区毛片| 久久综合色天天久久综合图片| 色一情一伦一子一伦一区| 奇米色一区二区| 一区二区在线观看av| 日韩一级视频免费观看在线| eeuss鲁片一区二区三区| 日韩av一区二区在线影视| 国产欧美精品在线观看| 欧美日韩国产色站一区二区三区| 国产福利视频一区二区三区| 亚洲成年人网站在线观看| 国产日韩高清在线| 欧美一级片在线| 欧美性一区二区| 国产宾馆实践打屁股91| 日韩精品一二区| 亚洲精品乱码久久久久久久久| 久久先锋影音av鲁色资源| 色狠狠综合天天综合综合| 国产精华液一区二区三区| 视频一区视频二区在线观看| 亚洲欧美日韩国产手机在线 | 久久久精品蜜桃| 91精品国产91综合久久蜜臀| 欧美亚洲另类激情小说| 丰满放荡岳乱妇91ww| 久久国产精品99精品国产 | 亚洲天堂av一区| 国产精品女主播在线观看| 欧美sm极限捆绑bd| 日韩欧美一区二区视频| 3d动漫精品啪啪| 精品视频在线免费| 欧美亚洲综合久久| 一本到不卡精品视频在线观看| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲综合小说图片| 中文字幕一区二区三区在线播放 | 欧美日韩性生活| 在线视频你懂得一区二区三区| 99综合影院在线| 99国产精品久久久久久久久久久| 国产福利91精品| 国产99久久久国产精品免费看| 国产一区二区日韩精品| 麻豆国产精品官网| 六月丁香婷婷色狠狠久久| 日日噜噜夜夜狠狠视频欧美人| 午夜精品成人在线| 爽好久久久欧美精品| 日韩精品一级二级| 美女网站视频久久| 美女mm1313爽爽久久久蜜臀| 国产综合一区二区| 国产精品亚洲成人| 国产精品亚洲视频| 国产成人精品一区二区三区四区| 国产一区在线精品| 丰满放荡岳乱妇91ww| 95精品视频在线| 欧美性猛交xxxxxxxx| 欧美精品少妇一区二区三区| 日韩一区二区三区视频在线观看 | 亚洲激情成人在线| 亚洲图片有声小说| 天天爽夜夜爽夜夜爽精品视频 | 午夜av一区二区| 免费日本视频一区| 国产精品一二三区| 色哟哟一区二区三区| 欧美日韩精品久久久| 欧美刺激午夜性久久久久久久| 久久精品夜夜夜夜久久| 中文字幕一区免费在线观看| 亚洲国产精品欧美一二99| 美日韩黄色大片| av不卡在线观看| 欧美乱熟臀69xxxxxx| 2欧美一区二区三区在线观看视频| 中文字幕一区二区日韩精品绯色| 亚洲一区二区五区| 国内偷窥港台综合视频在线播放| 91在线国产福利| 67194成人在线观看| 国产香蕉久久精品综合网| 亚洲精品成人在线| 麻豆精品新av中文字幕| 99精品视频一区二区三区| 日韩一区二区在线看片| 国产精品每日更新| 三级精品在线观看| 波多野结衣在线一区| 欧美一区二区三区不卡| 亚洲欧洲精品一区二区三区| 麻豆国产精品777777在线| 色婷婷亚洲精品| 国产精品亲子伦对白| 天天综合日日夜夜精品| 99精品欧美一区二区三区综合在线| 精品捆绑美女sm三区| 亚洲精品日日夜夜| 东方欧美亚洲色图在线| 欧美一区二区三区男人的天堂| 亚洲免费伊人电影| 成人一区二区在线观看| 日韩欧美一级精品久久| 亚洲国产sm捆绑调教视频| av一本久道久久综合久久鬼色| 久久综合狠狠综合久久激情| 蜜桃视频一区二区| 欧美日韩小视频| 亚洲成人资源网| 一本到不卡精品视频在线观看| 国产精品美女一区二区| 国产综合成人久久大片91| 91麻豆精品国产91| 亚洲一区av在线| 在线观看欧美精品| 亚洲免费电影在线| 99国产精品久久久| 国产精品久久久久久久久免费丝袜 | 亚洲综合激情网| 97成人超碰视| 亚洲日本免费电影| 不卡的av电影| 玉足女爽爽91| 欧美日韩精品福利| 午夜精品123|