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

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

?? zl5011xdmampc8260.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
                     ZL5011X_FALSE,
                     {NULL,NULL}
                   };
#else
static zl5011xIdmaMonitorS IdmaMonitor =
                  {
                     {ZL5011X_FALSE,ZL5011X_FALSE,ZL5011X_FALSE,ZL5011X_FALSE},
                     OS_ERROR,
                     ZL5011X_FALSE,
                     {NULL,NULL,NULL,NULL}
                   };
#endif

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

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

 Function:
   zl5011xDmaDetermineStatus

 Description:
    This function will determine the status of the DMA channel

 Inputs:
    dmaChannel        DMA channel that requires checking

 Outputs:
   None

 Returns:
   zl5011xDmaStatusE   Any of: ZL5011X_DMA_STOPPED (DMA has responded to stop
                              command),
                              ZL5011X_DMA_OUT_OF_BUFFERS (DMA has no valid
                              buffers to process),
                              ZL5011X_DMA_EXTERNAL_ABORT (DMA received an
                              external abort command,
                              ZL5011X_DMA_BUFFER_DONE, (DMA processed a buffer
                              with interrupt (I) bit set)
                              ZL5011X_DMA_ACTIVE (DMA still active)

 Remarks:

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

extern zl5011xDmaStatusE zl5011xDmaDetermineStatus(zl5011xDmaChannelS *dmaChannel)
{
   zl5011xDmaStatusE dmaStatus;
   zl5011xDmaStructS *dma = (zl5011xDmaStructS *)dmaChannel->dma;
   Uint32T regValue;

   //ZL5011X_TRACE(ZL5011X_DMA_FN_ID,"zl5011xDmaDetermineStatus:", 0, 0, 0, 0, 0, 0);

   /* Read idsr status register to determine status                         */
   regValue = dma->reg->idsr;

   /* Process register to determine status                                  */
   if ((regValue & PPC8260_IDMA_IDSR_SC) != 0)
   {
     dmaStatus = ZL5011X_DMA_STOPPED;
   }
   else
   {
     if ((regValue & PPC8260_IDMA_IDSR_OB) != 0)
     {
       dmaStatus = ZL5011X_DMA_OUT_OF_BUFFERS;
     }
     else
     {
       if ((regValue & PPC8260_IDMA_IDSR_EDN) != 0)
       {
         dmaStatus = ZL5011X_DMA_EXTERNAL_ABORT;
       }
       else
       {
         if ((regValue & PPC8260_IDMA_IDSR_BC) != 0)
         {
           dmaStatus = ZL5011X_DMA_BUFFER_DONE;
         }
         else
         {
           /* Assume that DMA is active because no other bits are set!      */
           dmaStatus = ZL5011X_DMA_ACTIVE;
         }
       }
     }
   }

   return dmaStatus;
}

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

 Function:
   zl5011xDmaIssueCommand

 Description:
    This function will gain access to the Communication Processor Module (CPM),
    and issue the appropriate IDMA command (start or stop)

 Inputs:
    dmaChannel      DMA channel to issue command to
    dmaCommand      Any of: ZL5011X_DMA_START_COMMAND,
                            ZL5011X_DMA_STOP_COMMAND

 Outputs:
   None

 Returns:
   zlStatusE

 Remarks:

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

extern zlStatusE zl5011xDmaIssueCommand(zl5011xDmaChannelS *dmaChannel,
                                               zl5011xDmaCommandE dmaCommand)
{
   zlStatusE status = ZL5011X_OK;
   zl5011xDmaStructS *dma = (zl5011xDmaStructS *)dmaChannel->dma;
   Uint32T timeout;
   volatile Uint32T *cpmRegister =
                          (Uint32T *)(dmaChannel->imm + PPC8260_IMM_CPM_CPCR);

   if (status == ZL5011X_OK)
   {
     ZL5011X_TRACE(ZL5011X_DMA_FN_ID,"zl5011xDmaIssueCommand:", 0, 0, 0, 0, 0, 0);

     /* Wait for CPM to become free for new command                           */
     for(timeout=0;timeout<ZL5011X_CPM_MODULE_TIMEOUT;timeout++)
     {
       if ((*cpmRegister & PPC8260_CPM_BUSY) == 0)
       {
         break;
       }
       OS_TICK_DELAY(1); /* Wait 1 processor tick before checking again       */
     }

     if (timeout == ZL5011X_CPM_MODULE_TIMEOUT)
     {
       status = ZL5011X_DMA_QUEUE_FAIL;
     }

     /* issue IDMA command                                                    */
     if (status == ZL5011X_OK)
     {
       /* Clear IDSR register                                                 */
       dma->reg->idsr = PPC8260_IDMA_IDSR_BC
                         | PPC8260_IDMA_IDSR_EDN
                         | PPC8260_IDMA_IDSR_OB
                         | PPC8260_IDMA_IDSR_SC;

       if (dmaCommand == ZL5011X_DMA_START_COMMAND)
       {
         dma->params->istate  =  0;       /* Clear before every start command */
         zl5011xConnectDreq(dmaChannel);

         /* Formulate CPM start command for DMA channel                       */
         *cpmRegister = PPC8260_CPM_IDMA_START
                           +(PPC8260_CPM_COMMAND_INC*dmaChannel->channelNumber);
       }
       else
       {
         zl5011xDisconnectDreq(dmaChannel);

         /* Formulate CPM stop command for DMA channel                        */
         *cpmRegister = PPC8260_CPM_IDMA_STOP
                           +(PPC8260_CPM_COMMAND_INC*dmaChannel->channelNumber);

         /* Wait for DMA to stop                                              */
         for(timeout=0;timeout<ZL5011X_IDMA_STOP_TIMEOUT;timeout++)
         {
           if ((dma->reg->idsr & PPC8260_IDMA_IDSR_SC) != 0)
           {
             break;
           }
         }

         if (timeout == ZL5011X_IDMA_STOP_TIMEOUT)
         {
           status = ZL5011X_DMA_QUEUE_FAIL;
         }
       }
     }
   }

   return status;
}

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

 Function:
   zl5011xDmaInitialise

 Description:
   Initialises the the IDMA channel and creates the chain of descriptor buffers

 Inputs:
   dmaChannel        DMA channel to initialise

 Outputs
   None

 Returns:
   zlStatusE

 Remarks:
   Note: This function also sets the device to use active
   high signalling for its DREQ signal and active low
   signalling for its DACK signal.

*******************************************************************************/
extern zlStatusE zl5011xDmaInitialise(zl5011xDmaChannelS *dmaChannel)
{
   zlStatusE status = ZL5011X_OK;
   zl5011xDmaStructS *dma;
   Uint32T n;
   Uint16T *dmaChannelBaseAddress;

   /* Allocate IDMA parameter (dual port) RAM                                 */
   if (status == ZL5011X_OK)
   {
     ZL5011X_TRACE(ZL5011X_DMA_FN_ID,"zl5011xDmaInitialise:", 0, 0, 0, 0, 0, 0);

     /* Determine which of the global structures to access                    */
     if (dmaChannel->dmaDirection == ZL5011X_DMA_TRANSMIT)
     {
       dma = &TxRamPtrs;
     }
     else
     {
       dma = &RxRamPtrs;
     }
     dmaChannel->dma = dma;

     /* Get imm base address                                                  */
     dmaChannel->imm = OS_IMMR_GET();

     /* Allocate memory for the DMA channel parameters                        */
     dma->params = (zl5011xDmaParametersS*)sys82xxDpramAlignedMalloc
                    (sizeof(zl5011xDmaParametersS),ZL5011X_DPRAM_BASE_ADDRESS);

     /* Allocate memory for the buffer descriptors and store the lowest 16
        bits                                                                  */
     dma->bufferDescrip =
         (zl5011xDmaBufferDescripS *)sys82xxDpramAlignedMalloc
              (sizeof(zl5011xDmaBufferDescripS)*dmaChannel->numberOfBuffers,
                           ZL5011X_DB_BASE_ADDRESS);
     if ((dma->params == NULL) || (dma->bufferDescrip == NULL))
     {
       status = ZL5011X_RTOS_MEMORY_FAIL;
     }

     dma->params->ibase =
                     (Uint16T)((Uint32T)dma->bufferDescrip & 0xFFFF);
     dma->params->ibdptr = dma->params->ibase;
   }

   if (status == ZL5011X_OK)
   {
     /* Set up the registers for DMA the channel                              */
     dma->reg = (zl5011xDmaRegistersS *)
           (dmaChannel->imm +PPC8260_IMM_IDSR
                          +(PPC8260_IMM_IDSR_INC*dmaChannel->channelNumber));

     /* Disable all interrupts from reaching the core                         */
     dma->reg->idmr = 0;

     /* Store the base address for the DMA in the appropriate place in the
        parameter RAM. Note only the lowest 16 bits are stored                */
     dmaChannelBaseAddress = (Uint16T *)(dmaChannel->imm +PPC8260_IMM_IDMA_BASE
                        +(PPC8260_IMM_IDMA_BASE_INC*dmaChannel->channelNumber));
     *dmaChannelBaseAddress = (Uint16T)(((Uint32T)dma->params) & 0xFFFF);

     /* Setup parameter RAM transfer buffer size                              */
     dma->params->dcm = (ZL5011X_DMA_WRAP << ZL5011X_DMA_WRAP_BIT_SHIFT);

     /* Device present - can do a real transfer                               */
     if (dmaChannel->dmaDirection == ZL5011X_DMA_TRANSMIT)
     {
       dma->params->dcm = dma->params->dcm
                      | PPC8260_IDMA_SD_MEM_PER
                      | PPC8260_IDMA_SINC
                      | PPC8260_IDMA_ERM
                      | PPC8260_IDMA_DT;

       dma->params->ss_max = (Uint16T)zl5011xDmaProps.alignmentSize;
       dma->params->dts = (Uint16T)ZL5011X_PER_PORT_TRANSFER_SIZE;
       dma->params->sts = (Uint16T)zl5011xDmaProps.alignmentSize;
     }
     else
     {
       dma->params->dcm = dma->params->dcm
                      | PPC8260_IDMA_SD_PER_MEM
                      | PPC8260_IDMA_DINC
                      | PPC8260_IDMA_ERM
                      | PPC8260_IDMA_DT;

       dma->params->ss_max = (Uint16T)zl5011xDmaProps.alignmentSize;
       dma->params->dts = (Uint16T)zl5011xDmaProps.alignmentSize;
       dma->params->sts = (Uint16T)ZL5011X_PER_PORT_TRANSFER_SIZE;
     }

     /* Allocate memory in the parameter RAM for the transfer buffer, and store
        the lowest 16 bits of this address                                    */
     dma->params->dpr_buf =
        (Uint16T)(0xFFFF & ((Uint32T)sys82xxDpramAlignedMalloc
        (zl5011xDmaProps.transferBufferSize,zl5011xDmaProps.transferBufferSize)));

     /* Setup buffer descriptors. First allocate the memory to store all the
        memory pointers                                                       */
     dmaChannel->buffer = (Uint8T **)OS_MALLOC(
                                  dmaChannel->numberOfBuffers*sizeof(Uint8T *));
     if (dmaChannel->buffer == NULL)
     {
        status = ZL5011X_RTOS_MEMORY_FAIL;
     }
     else
     {
       dmaChannel->bufferIndex = 0;
       for(n=0;n<dmaChannel->numberOfBuffers && status == ZL5011X_OK;n++)
       {
         /* Allocate a block of non-cached memory, which is aligned to the
          transfer buffer size                                                */
         dmaChannel->buffer[n] = (Uint8T *)OS_CACHE_DMA_MALLOC(
                   (dmaChannel->bufferSize*sizeof(Uint32T))
                                              +zl5011xDmaProps.alignmentSize);

         if (dmaChannel->buffer[n] == NULL)
         {
           status = ZL5011X_RTOS_MEMORY_FAIL;
         }
         else
         {
           if (dmaChannel->dmaDirection == ZL5011X_DMA_TRANSMIT)
           {
             dma->bufferDescrip[n].source =
                          ZL5011X_DMA_BUFFER_BURST_ALIGNED(dmaChannel->buffer[n]);
             dma->bufferDescrip[n].destination =
                       dmaChannel->devParams->baseAdd + ZL5011X_CPU_PACKET_TX;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产激情二区三区| 久久免费午夜影院| 欧美三级视频在线播放| 欧美日韩一区中文字幕| 欧美一级精品大片| 久久久亚洲精华液精华液精华液| 精品毛片乱码1区2区3区| 国产精品国产三级国产有无不卡| 亚洲自拍偷拍综合| 国产精品88av| 欧美精品久久久久久久多人混战| 欧美成人伊人久久综合网| 国产精品欧美一级免费| 日产欧产美韩系列久久99| 成人精品一区二区三区四区| 6080日韩午夜伦伦午夜伦| 国产精品久久久久久妇女6080 | av资源网一区| 欧美成人猛片aaaaaaa| 亚洲六月丁香色婷婷综合久久 | 国产欧美日韩另类一区| 亚洲综合久久久久| 91视频你懂的| 亚洲国产精品ⅴa在线观看| 蜜桃视频在线观看一区| 欧美日韩一级视频| 亚洲一级二级在线| 不卡的看片网站| 国产精品乱码人人做人人爱| 精品影院一区二区久久久| 欧美一区二区视频免费观看| 亚洲成人自拍网| 欧美日韩三级在线| 亚洲国产视频在线| 欧美日韩免费观看一区三区| 亚洲图片欧美视频| 欧美日韩一区 二区 三区 久久精品| 中文字幕一区二区不卡| 97se亚洲国产综合自在线观| 国产精品人妖ts系列视频| 成人av动漫网站| 午夜精品福利一区二区蜜股av| 欧美日韩高清一区二区不卡| 日韩国产高清影视| 久久色视频免费观看| 成人h动漫精品| 亚洲va欧美va人人爽| 日韩视频在线观看一区二区| 黄色资源网久久资源365| 1024成人网| 精品福利一区二区三区免费视频| 国产成人在线色| 污片在线观看一区二区 | 久久99精品久久久| 国产精品三级av| 欧美一区二区三区在| 成人97人人超碰人人99| 日韩va亚洲va欧美va久久| 国产精品色噜噜| 日韩免费看网站| 欧美色区777第一页| 国产精品77777| 奇米精品一区二区三区在线观看一| 久久精品欧美一区二区三区麻豆| 欧美日韩一区不卡| 97久久精品人人做人人爽50路| 六月婷婷色综合| 婷婷六月综合亚洲| 亚洲精品乱码久久久久久黑人| 久久毛片高清国产| 日韩欧美久久久| 欧美精品一级二级| 欧美色倩网站大全免费| 91色在线porny| 波多野结衣中文字幕一区| 国产美女在线观看一区| 久久99精品国产麻豆不卡| 天天综合网天天综合色| 亚洲国产精品久久艾草纯爱 | 在线亚洲高清视频| 日本道免费精品一区二区三区| av综合在线播放| 在线观看日韩av先锋影音电影院| 色综合咪咪久久| 色婷婷综合久久久中文一区二区 | 国产成人在线看| 99久久综合国产精品| 欧洲av一区二区嗯嗯嗯啊| 欧美图区在线视频| 欧美一二三区精品| 久久久激情视频| 国产精品人成在线观看免费| 亚洲精品国产精品乱码不99| 午夜精品视频一区| 激情综合一区二区三区| 国产成人av电影在线播放| 一本色道综合亚洲| 日韩免费看的电影| 夜色激情一区二区| 激情综合网av| 欧美日韩精品综合在线| 久久尤物电影视频在线观看| 亚洲精品中文在线| 亚洲成人自拍偷拍| 亚洲欧美一区二区久久| 亚洲欧洲日产国产综合网| 亚洲午夜激情av| 精品亚洲国内自在自线福利| 成人福利视频网站| 日韩一区二区麻豆国产| 亚洲欧美综合在线精品| 免费成人av在线播放| 91年精品国产| 欧美韩国日本综合| 美女视频免费一区| 欧美综合天天夜夜久久| 亚洲国产精品二十页| 老司机精品视频一区二区三区| 成人av资源网站| 国产亚洲欧美激情| 久久se精品一区精品二区| 欧美日韩国产综合一区二区三区 | 99精品视频在线免费观看| 2023国产精华国产精品| 日本不卡一二三区黄网| 欧美调教femdomvk| 午夜精品久久久久久久| 欧美高清精品3d| 日本午夜一区二区| 日韩一区二区三区在线视频| 日本大胆欧美人术艺术动态| 欧美一区二区不卡视频| 老司机一区二区| 久久精品亚洲国产奇米99| 国产剧情一区在线| 国产精品无人区| 色88888久久久久久影院按摩| 亚洲免费av观看| 欧美精品在线一区二区| 毛片基地黄久久久久久天堂| 精品少妇一区二区三区在线播放| 国产精品亚洲一区二区三区在线| 久久久国产午夜精品| 色婷婷久久99综合精品jk白丝 | 99久久er热在这里只有精品66| 国产精品久久久久久户外露出| 日本道在线观看一区二区| 天天色 色综合| 欧美激情一区二区| 91精品免费观看| 99精品视频在线免费观看| 久久精品99久久久| 一区二区三区免费观看| 精品国产一区二区在线观看| 色婷婷亚洲综合| 成人午夜激情在线| 免费观看日韩电影| 亚洲精品一二三| 久久久久免费观看| 91精品久久久久久久99蜜桃 | 亚洲视频一二三区| 久久久久久一级片| 日韩精品专区在线影院重磅| 一本在线高清不卡dvd| 国产成人三级在线观看| 国模套图日韩精品一区二区| 日韩电影在线观看网站| 天天影视涩香欲综合网| 亚洲18女电影在线观看| 亚洲一区二区综合| 亚洲一区在线电影| 亚洲图片欧美色图| 婷婷开心久久网| 图片区小说区区亚洲影院| 午夜亚洲福利老司机| 亚洲成av人片一区二区三区 | 欧美伊人久久久久久久久影院| 99久久伊人网影院| 欧美三级一区二区| 91精品国产全国免费观看| 日韩视频在线你懂得| 日韩午夜精品电影| 久久精品免视看| 最新久久zyz资源站| 5月丁香婷婷综合| 狠狠色综合播放一区二区| 美腿丝袜亚洲一区| 成人激情黄色小说| 91精品免费在线观看| 中文字幕乱码日本亚洲一区二区 | 91精品一区二区三区久久久久久| 91精品蜜臀在线一区尤物| 久久精品欧美日韩| 视频一区欧美精品| 国产v日产∨综合v精品视频| 欧美在线观看18| 欧美极品少妇xxxxⅹ高跟鞋| 性做久久久久久免费观看欧美| 成人一级黄色片| 日韩一卡二卡三卡国产欧美|