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

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

?? zl5011xinterrupts.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
         intrMsg.interruptSource = ZL5011X_GRANULE_INTERRUPT;
         (void)zl5011xGmGetStatus(zl5011xParams, &(intrMsg.activeInterrupts));

         /* if the GM raises an interrupt, then it is probably going to persist,
            so disable the interrupt */
         (void)zl5011xGmDisableInterrupts(zl5011xParams, intrMsg.activeInterrupts);
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_HOST_OVERFLOW_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_HOST_OVERFLOW_INTERRUPT;

         (void)zl5011xCpqGetStatus(zl5011xParams, &(intrMsg.activeInterrupts));

         /* the interrupt is a threshold, so may remain asserted. Therefore, the
            only option is to clear the interrupt at the top level. The application can
            turn this int back on again after taking any corrective action */
         (void)zl5011xAdmDisableInterruptSource(zl5011xParams, ZL5011X_INTERRUPT_ZERO, ZL5011X_1BIT_MASK << admIntrBit);
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_HOST_GRANULES_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_HOST_GRANULES_INTERRUPT;

         /* the interrupt is a threshold, so may remain asserted. Therefore, the
            only option is to clear the interrupt at the top level. The application can
            turn this int back on again after taking any corrective action */
         (void)zl5011xAdmDisableInterruptSource(zl5011xParams, ZL5011X_INTERRUPT_ZERO, ZL5011X_1BIT_MASK << admIntrBit);
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_MEMORY_PARITY_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_MEMORY_PARITY_INTERRUPT;
         (void)zl5011xMmGetParityStatus(zl5011xParams, &temp8, (zl5011xBooleanE *)(&(intrMsg.activeInterrupts)));
         intrMsg.misc = (Uint32T)temp8;
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_WAN_TX_ERROR_OVERFLOW_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_WAN_TX_ERROR_OVERFLOW_INTERRUPT;
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_WAN_TX_INFO_OVERFLOW_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_WAN_TX_INFO_OVERFLOW_INTERRUPT;
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_WAN_TX_QUEUE_OVERFLOW_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_WAN_TX_QUEUE_OVERFLOW_INTERRUPT;
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_WAN_RX_OVERFLOW_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_WAN_RX_OVERFLOW_INTERRUPT;
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_WAN_RX_TASK_OVERFLOW_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_WAN_RX_TASK_OVERFLOW_INTERRUPT;
         break;

      case ZL5011X_1BIT_MASK << ZL5011X_HOST_DMA_RX_INTERRUPT:
         intrMsg.interruptSource = ZL5011X_HOST_DMA_RX_INTERRUPT;
         (void)zl5011xCpuDmaGetIntrStatus(zl5011xParams, &(intrMsg.activeInterrupts));

         if (zl5011xIrqDmaRxFuncEnableFlag == ZL5011X_TRUE)
         {
            if (zl5011xIrqDmaRxFunc != NULL)
            {
               (void)zl5011xIrqDmaRxFunc();

               /* processed the interrupt internally, so don't pass on to the application */
               matchedInt = ZL5011X_FALSE;
            }
         }
         break;

      default :
         matchedInt = ZL5011X_FALSE;
         break;
   }

   if (matchedInt == ZL5011X_TRUE)
   {
      /* queue the intr messages to deferred routine */
      status = zl5011xIsrQueueUpInterrupts(zl5011xParams, &intrMsg);
   }

   return status;
}

/*******************************************************************************
 Function:
    zl5011xIsrApiHandler

 Description:
   This is the ISR function for the API interrupt.


 Inputs:

 Outputs:
    none
 Returns:
   none
 Remarks:

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

void zl5011xIsrApiHandler(void)
{
   zl5011xParamsS* zl5011xParams;

   zlStatusE status = ZL5011X_OK;
   Uint32T temp, index= 0;
   Uint32T admIntrStatus= 0;
   Uint32T intContext= 0;
   Uint32T rollOverFlags= 0;
   Uint8T  portNum=0;
   zl5011xInterruptQueueDataS intr;

#ifdef _DEBUG
   Uint32T tempTraceFnFilter = 0;
   Uint32T tempTraceCtxtFnFilter = 0;
   Uint32T tempTraceCtxtFilter = 0;

   if (zl5011xTraceIsrEnable == ZL5011X_FALSE)
   {
      /* disable the trace during the interrupt handler */
      tempTraceFnFilter = zl5011xTraceFnFilter;
      tempTraceCtxtFnFilter = zl5011xTraceCtxtFnFilter;
      tempTraceCtxtFilter = zl5011xTraceCtxtFilter;

      zl5011xTraceFnFilter = 0;
      zl5011xTraceCtxtFnFilter = 0;
      zl5011xTraceCtxtFilter = 0;
   }
#endif

   ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrApiHandler:", 0,0,0,0,0,0);

   for (index = 0; index <ZL5011X_ISR_MAX_NUMBER_DEVICES; index++)
   {
      zl5011xParams = zl5011xIsrDeviceTable[index];
      if (zl5011xParams != NULL)
      {
         (void)zl5011xAdmGetInterruptStatus(zl5011xParams, &admIntrStatus);

         ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrApiHandler: device %u (%08X), int %08X",
               index, (Uint32T)zl5011xParams, admIntrStatus, 0, 0, 0);

         /* mask out any interrupts that are not for this interrupt pin */
         admIntrStatus &= zl5011xParams->interruptMasks.admMasks[ZL5011X_INTERRUPT_ONE];

         /* check if the PAC interrupt is active */
         if ((admIntrStatus & (ZL5011X_1BIT_MASK << ZL5011X_WAN_CLK_INTERRUPT)) != 0)
         {
            (void)zl5011xPacGetStatus(zl5011xParams, &temp);

            if ((temp & (ZL5011X_1BIT_MASK << ZL5011X_PAC_ASYNC_INT)) != 0)
            {
               if (zl5011xCetMsgQid != NULL)
               {
                  (void)zl5011xHandleCetIntr(zl5011xParams);
               }
            }

            if (zl5011xIsrAppIntNum != (Uint32T)ZL5011X_INVALID)
            {
               /* application interrupt is running so pass on any changes to the PLL status */
               if ((temp & ((ZL5011X_1BIT_MASK << ZL5011X_DPLL_LOCK_INT) |
                  (ZL5011X_1BIT_MASK << ZL5011X_DPLL_REF_CHANGE_INT) | (ZL5011X_1BIT_MASK << ZL5011X_DPLL_HOLDOVER_INT))) != 0)
               {
                  intr.interruptSource = ZL5011X_WAN_CLK_INTERRUPT;
                  intr.activeInterrupts = temp & ~(ZL5011X_1BIT_MASK << ZL5011X_PAC_ASYNC_INT);
                  intr.context = (Uint32T)ZL5011X_INVALID_CONTEXT;

                  /* retrieve the DPLL status, since the application is going to need
                     that to determine what has happened */
                  (void)zl5011xPacDpllGetStatusValue(zl5011xParams,  &(intr.misc));

                  /* send the message */
                  (void)zl5011xIsrQueueUpInterrupts(zl5011xParams, &intr);
               }
            }

            /* if the slew rate interrupt is enabled then need to mask it out, since it may
               be set again immediately. The other interrupts are status changes, so only
               need to reset the interrupt */
            if ((temp & (ZL5011X_1BIT_MASK << ZL5011X_DPLL_SLEW_RATE_INT)) != 0)
            {
               (void)zl5011xPacDisableInterrupts(zl5011xParams, ZL5011X_1BIT_MASK << ZL5011X_DPLL_SLEW_RATE_INT);
            }

            /* Now clear any interrupts that were active */
            (void)zl5011xPacClearInterrupts(zl5011xParams, temp);
         }

         /* check RTP counter interrupt */
         if ((admIntrStatus & (ZL5011X_1BIT_MASK << ZL5011X_RTP_STATS_INTERRUPT)) != 0)
         {
            /* find out which context it is for */
            status = zl5011xRtpGetInterruptStatus(zl5011xParams,
                  &intContext, &rollOverFlags);

            if (status ==ZL5011X_OK)
            {
               status = zl5011xRtpUpdateStatistics(zl5011xParams, intContext, rollOverFlags);
            }
         }

         /* check MAC interrupt */
         if ((admIntrStatus & (ZL5011X_1BIT_MASK << ZL5011X_MAC_IF_INTERRUPT)) != 0)
         {
            /* test which port */
            for( portNum= 0; portNum < zl5011xParams->devLimits.lanNumLanPorts; portNum++)
            {
             (void)zl5011xPkiUpdateCounters(zl5011xParams, portNum);
            }

            /* check if a PCS int is active */
            intr.interruptSource = ZL5011X_MAC_IF_INTERRUPT;
            (void)zl5011xPkiGetPcsStatus(zl5011xParams, &(intr.activeInterrupts));

            if (intr.activeInterrupts != 0)
            {
               /* only send a message if an interrupt is set */
               (void)zl5011xIsrQueueUpInterrupts(zl5011xParams, &intr);
            }
         }

         /* clear interrupts in this device */
         (void)zl5011xAdmClearInterruptSource( zl5011xParams, admIntrStatus);
      }
   }

#ifdef _DEBUG
   if (zl5011xTraceIsrEnable == ZL5011X_FALSE)
   {
      /* restore the trace variables now that the interrupt has finished */
      zl5011xTraceFnFilter = tempTraceFnFilter;
      zl5011xTraceCtxtFnFilter = tempTraceCtxtFnFilter;
      zl5011xTraceCtxtFilter = tempTraceCtxtFilter;
   }
#endif
}

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

 Function:
    zl5011xHandleCetIntr

 Description:
     This function is called in the Isr Task, after we established that there is this
     device in the dev table and
     the PAC interrupt mask   is set in the ADM block and
     the PAC interrupt status is set in the ADM.

     It sends messages to the CET task using its message queue, after checking
     in PAC that relevant mask bit is enabled and relevant status bit set.

 Inputs:
   zl5011xParams      Pointer to the structure for this device instance

 Outputs:

 Returns:
    zlStatusE

 Remarks:

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

static zlStatusE zl5011xHandleCetIntr(zl5011xParamsS *zl5011xParams)
{
   zlStatusE status= ZL5011X_OK;

   if (OS_MSG_Q_SEND(zl5011xCetMsgQid, (char *)&zl5011xParams, sizeof(zl5011xParamsS *),
         OS_NO_WAIT, 0) == OS_ERROR)
   {
       status= ZL5011X_ERROR;
       ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xHandleCetIntr: ERROR queueing",
                     0,0,0,0,0,0);
   }

   return status;
}

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

 Function:
    zl5011xIsrIsRunning

 Description:
   This function can be called to verify that the ISR is running.

 Inputs:
   none

 Outputs:
   pFlag    ZL5011X_TRUE for ISR Started and ZL5011X_FALSE for not started.

 Returns:
    zlStatusE

 Remarks:

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

zlStatusE zl5011xIsrIsRunning(zl5011xBooleanE *pFlag)
{
   if (zl5011xIsrApiIntNum == (Uint32T)ZL5011X_INVALID)
   {
      *pFlag = ZL5011X_FALSE;
   }
   else
   {
      *pFlag = ZL5011X_TRUE;
   }

   return ZL5011X_OK;
}

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

 Function:
    zl5011xIsrCheckDevice

 Description:
   This function can be called to verify that the application ISR is running
   for the given device.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance

 Outputs:
   pFlag          ZL5011X_TRUE for ISR Started and ZL5011X_FALSE for not started.

 Returns:
    zlStatusE

 Remarks:

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

zlStatusE zl5011xIsrCheckDevice(zl5011xParamsS *zl5011xParams, zl5011xBooleanE *pFlag)
{
   zlStatusE status= ZL5011X_OK;

   if (zl5011xIsrAppIntNum == (Uint32T)ZL5011X_INVALID)
   {
      *pFlag = ZL5011X_FALSE;
   }
   else
   {
      Uint32T index;

      /* check if the device is listed in the interrupt service table */
      for (index = 0; index < ZL5011X_ISR_MAX_NUMBER_DEVICES; index++)
      {
         if(zl5011xIsrDeviceTable[index] == zl5011xParams)
         {
            *pFlag = ZL5011X_TRUE;
            break;
         }
      }
   }

   return status;
}

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

 Function:
    zl5011xIsrSetCetQueueid

 Description:
     This function is called by the CET code to give the local static CET Queue ID a
     new val

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情网站免费观看| 亚洲精品在线免费播放| 91麻豆精品国产自产在线| 久久久久久亚洲综合影院红桃| 国产精品人成在线观看免费| 亚洲成年人影院| 成av人片一区二区| 久久久噜噜噜久噜久久综合| 一区二区视频在线| 国产成人在线视频免费播放| 欧美美女激情18p| 亚洲免费成人av| 国产成人av一区| 久久综合久久综合久久| 午夜精品爽啪视频| 在线中文字幕不卡| 国产精品午夜春色av| 久久爱www久久做| 欧美日韩国产一区| 亚洲一区在线电影| 色综合天天做天天爱| 国产精品久久久久久久久快鸭| 美国av一区二区| 欧美一区二区三区在| 亚洲成人一区二区在线观看| 91视频观看免费| 国产精品理论片在线观看| 国产福利一区二区三区视频| 欧美不卡视频一区| 麻豆久久一区二区| 日韩精品一区二区三区在线| 日韩成人午夜电影| 91麻豆精品国产自产在线观看一区| 亚洲国产日日夜夜| 欧美日韩卡一卡二| 日韩二区三区在线观看| 日韩欧美一二区| 国模娜娜一区二区三区| 欧美成人精品1314www| 男女男精品视频| 欧美成人精精品一区二区频| 国模冰冰炮一区二区| 久久精品欧美一区二区三区不卡 | 国产一区视频在线看| 欧美大片在线观看一区二区| 蜜桃一区二区三区在线| 欧美成人午夜电影| 成人aa视频在线观看| 亚洲女人****多毛耸耸8| 在线精品视频一区二区三四| 亚洲高清免费视频| 精品久久五月天| 成人激情免费网站| 亚洲在线观看免费视频| 日韩一区二区三区在线视频| 九九国产精品视频| 国产精品国产三级国产普通话99| 不卡电影一区二区三区| 亚洲一区二区3| 精品国产一区二区精华| thepron国产精品| 丝袜美腿亚洲综合| 中文在线一区二区 | 亚洲女人****多毛耸耸8| 欧美女孩性生活视频| 国产一区二区不卡老阿姨| 国产精品国产自产拍在线| 91麻豆精品国产91久久久久| 国产盗摄一区二区三区| 日韩美女啊v在线免费观看| 欧美一区二区三区四区久久 | 国产欧美精品日韩区二区麻豆天美| 99国产精品国产精品毛片| 日韩电影在线免费观看| 国产精品久久一卡二卡| 欧美一区二区啪啪| 91麻豆成人久久精品二区三区| 日韩成人一区二区三区在线观看| 国产精品视频麻豆| 欧美一区二区三区不卡| 波多野结衣视频一区| 加勒比av一区二区| 亚洲综合网站在线观看| 欧美激情一区二区三区全黄| 欧美日韩国产综合视频在线观看| 懂色av中文字幕一区二区三区| 五月天视频一区| ●精品国产综合乱码久久久久| 91精品国产综合久久久蜜臀粉嫩 | 亚洲福利视频导航| 欧美高清在线精品一区| 欧美一区二区在线播放| 日本国产一区二区| 国产激情一区二区三区四区| 日本伊人色综合网| 亚洲一区二区三区四区的| 国产情人综合久久777777| 91精品久久久久久久91蜜桃| 色拍拍在线精品视频8848| 成人精品小蝌蚪| 国产一区二区三区综合| 美女视频黄 久久| 亚洲成人动漫精品| 香蕉成人伊视频在线观看| 亚洲免费在线看| 亚洲精品视频一区| 亚洲男帅同性gay1069| 亚洲欧美一区二区视频| 国产精品久久网站| 国产精品福利一区二区三区| 国产精品午夜在线| 亚洲视频在线一区| 日韩理论片在线| **欧美大码日韩| 亚洲天堂av一区| 1000部国产精品成人观看| 一区在线中文字幕| 亚洲欧美一区二区不卡| 亚洲欧美日韩在线不卡| 亚洲男同1069视频| 亚洲高清免费观看| 美脚の诱脚舐め脚责91| 美女视频一区在线观看| 韩国三级中文字幕hd久久精品| 黄页视频在线91| 国产盗摄女厕一区二区三区| 国产69精品久久99不卡| 成人精品免费看| 91久久国产最好的精华液| 在线观看视频一区二区欧美日韩 | 成人免费看视频| 成人av影院在线| 一本色道久久加勒比精品 | 欧美v亚洲v综合ⅴ国产v| 2020国产精品自拍| 中文字幕av一区 二区| 国产精品毛片a∨一区二区三区| 中文字幕在线不卡视频| 亚洲综合小说图片| 麻豆91在线播放免费| 高清不卡在线观看av| 色婷婷激情综合| 91精品欧美福利在线观看| 精品免费视频.| 亚洲欧美在线观看| 日韩中文字幕一区二区三区| 国产一区在线精品| 在线观看视频一区二区| 欧美精品一区在线观看| 成人免费一区二区三区视频| 婷婷国产v国产偷v亚洲高清| 国产福利视频一区二区三区| 欧美三级电影在线观看| www欧美成人18+| 一区二区三区在线视频观看 | 精品精品欲导航| 亚洲天堂中文字幕| 久久狠狠亚洲综合| 91免费精品国自产拍在线不卡| 3d成人动漫网站| 亚洲国产精华液网站w| 亚洲国产视频一区| 国产成人综合视频| 91麻豆精品91久久久久同性| 国产精品色呦呦| 免费在线观看成人| 一本大道久久精品懂色aⅴ| 日韩亚洲欧美在线观看| 一区二区三区在线免费视频| 国产美女久久久久| 欧美精品久久久久久久久老牛影院| 2023国产精品| 日日夜夜精品视频免费| 91老师片黄在线观看| 久久久久久久久97黄色工厂| 亚洲成在人线在线播放| 色欧美片视频在线观看在线视频| 久久久久久免费网| 久久精品国产在热久久| 在线观看91精品国产麻豆| 亚洲精品v日韩精品| 9i在线看片成人免费| 国产亚洲一二三区| 国产又粗又猛又爽又黄91精品| 7878成人国产在线观看| 亚洲国产一区二区三区| 色先锋aa成人| 一区二区在线看| 97久久超碰国产精品电影| 中文字幕不卡在线观看| 国产寡妇亲子伦一区二区| 26uuu亚洲综合色| 久久精品国产999大香线蕉| 欧美一级艳片视频免费观看| 午夜精品在线视频一区| 欧美日韩美女一区二区| 日本怡春院一区二区| 欧美一区二区性放荡片| 免费看欧美女人艹b| 欧美精品777|