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

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

?? zl5011xcpu.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*******************************************************************************
*
*  File name:              zl5011xCpu.c
*
*  Version:                34
*
*  Author:                 PJE
*
*  Date created:           21/03/2002
*
*  Copyright 2002, 2003, 2004, 2005, Zarlink Semiconductor Limited.
*  All rights reserved.
*
*  Module Description:
*
*  This file contains all the functions that will initialise and control
*  the CPU block.
*
*  Revision History:
*
*  Rev:  Date:       Author:  Comments:
*  1     25/03/2002  PJE      before spec simplified
*  2     25/03/2002  PJE      compiles OK but CpuInit not finished.
*  3     26/03/2002  PJE      runs.
*  4     27/03/2002  PJE      zl5011xCpuDmaGetRxStatus() more params
*  5     17/04/2002  MRC      Changed the CHECK_.. macros to ZL5011X_CHECK_..
*  6     17/04/2002  MRC      Updated the revision history.
*  7     26/04/2002  MRC      Changed some data names in response to comments
*                             from Thomas, regarding the MIB interface.
*  8     30/04/2002  PJE      missing include file
*  9     15/05/2002  PJE      added function  zl5011xCpuSetTimeoutPeriod()
*  10    15/05/2002  PJE      Minor mods.
*  11    07/06/2002  LCW      Added zl5011xCpuDmaGetRxSeqNum
*  12    11/06/2002  MRC      Minor tweaks
*  13    02/07/2002  PJE      new timeoutperiod item in zl5011xCpuDmaIfS and
*                             cleanup for review.
*  14    12/07/2002  MRC      Rationalised the 2 enums for CPU queues
*  15    16/09/2002  PJE      New zl5011xCpuDmaSetPadding() &
*                             zl5011xCpuDmaSetDreqPolarity debugging.
*                             ..and incorporate them in CpuInit
*  16    23/09/2002  ARW      Renamed zl5011xCpuDmaGetRxStatus to
*                             zl5011xCpuDmaGetRxQueueStatus
*                             Added new functions zl5011xCpuDmaGetRxStatus &
*                             zl5011xCpuDmaGetTxStatus
*  17    26/09/2002  ARW      Renamed zl5011xCpuDmaGetRxQueueStatus to
*                             zl5011xCpuDmaGetRxQueueStatus
*  18    01/10/2002  DJA      File header updated
*                             ZL5011X_TRACE messages fixed up
*  19    07/10/2002  ARW      Added new function: CpuDmaSetDackPolarity
*                             Added new functionality to CpuInit
*                             Changed defaults in CpuInit
*                             Updated zl5011xCpuDmaSetRxControl &
*                             zl5011xCpuDmaSetTxControl
*  20    08/10/2002  PJE      Added new function: zl5011xCpuDmaGetIntrStatus
*  21    11/10/2002  PJE      peer rvw items
*  22    15/10/2002  ARW      Removed ZL5011X_DMA_HI_Z capability from
*                             DmaRxSetControl & DmaTxSetControl
*                             Added a parmaeter to DmaGetTxStatus to make it
*                             more consistant with get DmaGetRxStatus
*                             Swapped the GIF busy bits tested in DmaTxGetStatus
*                             and DmaGetRxStatus
*                             Changed the default set in CpuInit
*  23    16/10/2002  ARW      Inverted 3 bits for the constat register
*  24    23/10/2002  ARW      Function changes to match spec changes
*                               Added new functions for DMA bypass
*  25    31/10/2002  MRC      Added variants + minor fixes
*  26    24/03/2003  ARW      Added extra parameters to functions
*                                 zl5011xCpuDmaPTHWrite & zl5011xCpuDmaPRHRead
*  27    15/04/2003  ARW      Applied byte swapping to fuynctions
*                                 zl5011xCpuDmaPTHWrite & zl5011xCpuDmaPRHRead
*  28    09/06/2003  DJA      Performed pre-audit actions
*  29    05/07/2004  APL      Removed spurious comment
*  30    23/07/2004  MRC      Fixed some compiler warnings
*  31    29/07/2004  MRC      Fixed some compiler warnings
*  32    06/09/2004  APL      Clarified logic for DMA busy processing
*  33    11/02/2005  MRC      Used macros for writing / reading DMA packets
*  34    14/02/2005  MRC      Removed restriction on interrupt selection
*
******************************************************************************/

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

#include "zl5011x.h"
#include "zl5011xCpu.h"
#include "zl5011xCpuMap.h"
#include "zl5011xUtilLib.h"

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

/*****************   ENUMERATIONS    ******************************************/
typedef enum zl5011xDmaDeviceAccessTypeE
{
    ZL5011X_DMA_READ_ONLY,
    ZL5011X_DMA_WRITE_ONLY,
    ZL5011X_DMA_READ_WRITE
} zl5011xDmaDeviceAccessTypeE;

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

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

/*****************   STATIC FUNCTION DECLARATIONS *****************************/
static zlStatusE zl5011xCpuDmaStoreConstatRegister(zl5011xParamsS *zl5011xParams,
     Uint32T bits,Uint32T bitMask,zl5011xDmaDeviceAccessTypeE accessType);

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

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

 Function:
    zl5011xCpuInit

 Description:
    This function initialises the block, leaving then DMA disabled.
    Sets the block ID for the CPU.

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance

 Outputs:
    None

 Returns:
   zlStatusE

 Remarks:
    None

*******************************************************************************/
extern zlStatusE zl5011xCpuInit(zl5011xParamsS *zl5011xParams)
{
   zlStatusE status = ZL5011X_OK;

   ZL5011X_TRACE(ZL5011X_CPU_FN_ID, "zl5011xCpuInit:", 0, 0, 0, 0, 0, 0);

   status = zl5011xCpuSetTimeoutPeriod(zl5011xParams,
         ZL5011X_CPU_DEFAULT_TIMEOUT);

   /* Reset the DMA structures dmaParams using fns if possible */
   if(status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaSetDreqPolarity( zl5011xParams, ZL5011X_NEGATIVE);
   }

   if(status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaSetDackPolarity( zl5011xParams, ZL5011X_NEGATIVE);
   }

   if(status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaSetRxMode( zl5011xParams, ZL5011X_DMA_RX_SINGLEPKT);
   }

   if(status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaSetInterruptMode(zl5011xParams,ZL5011X_DMA_NO_INTERRUPT);
   }

   if(status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaSetRxQueue( zl5011xParams, ZL5011X_QUEUE_0);
   }

   if(status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaSetRxControl( zl5011xParams, ZL5011X_DMA_DISABLED);
   }

   if(status == ZL5011X_OK)
   {
      status= zl5011xCpuDmaSetTxControl( zl5011xParams, ZL5011X_DMA_DISABLED);
   }
   if(status == ZL5011X_OK)
   {
      status= zl5011xCpuDmaSetPadding( zl5011xParams, ZL5011X_DMA_NO_PADDING);
   }

   if (status == ZL5011X_OK)
   {
     status = zl5011xCpuDmaErrorFlagsDisable(zl5011xParams);
   }

   return(status);
}

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

 Function:
    zl5011xCpuDmaSetRxMode

 Description:
    This function writes to the device CPU block to set the DMA Rx Mode to
    single packet, empty buffer, empty buffer when it is no longer empty, or
    continuous mode.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   rxMode         Any of: ZL5011X_DMA_RX_SINGLEPKT,
                          ZL5011X_DMA_RX_EMPTYBUF,
                          ZL5011X_DMA_RX_CONTIN,
                          ZL5011X_DMA_RX_WAIT_AND_EMPTYBUF

 Outputs:
    None

 Returns:
   zlStatusE

 Remarks:
    None

*******************************************************************************/
extern zlStatusE zl5011xCpuDmaSetRxMode(zl5011xParamsS *zl5011xParams,
                                zl5011xDmaRxModeE rxMode)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T bits,bitMask = (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_ALL_PKT_BIT) |
                          (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_CONTINUOUS_BIT);

   ZL5011X_TRACE(ZL5011X_CPU_FN_ID,"zl5011xCpuDmaSetRxMode: mode %d",
         rxMode, 0, 0, 0, 0, 0);
   switch( rxMode)
   {
      case ZL5011X_DMA_RX_SINGLEPKT:
         bits = 0;
      break;
      case ZL5011X_DMA_RX_EMPTYBUF:
         bits = (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_ALL_PKT_BIT);
      break;
      case ZL5011X_DMA_RX_WAIT_AND_EMPTYBUF:
         bits = ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_CONTINUOUS_BIT;
      break;
      case ZL5011X_DMA_RX_CONTIN:
         bits = (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_ALL_PKT_BIT) |
                (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_CONTINUOUS_BIT);
      break;
      default:
         bits = 0;
         status = ZL5011X_PARAMETER_INVALID;
      break;
   }

   if (status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaStoreConstatRegister(zl5011xParams,bits,bitMask,
                                                        ZL5011X_DMA_READ_WRITE);

      if (status == ZL5011X_OK)
      {
         /* update structure */
         zl5011xParams->cpuDmaIf.rxMode= rxMode;
      }
   }

   return(status);
}

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

 Function:
    zl5011xCpuDmaSetInterruptMode

 Description:
    This function writes to the device CPU block to set the DMA Interrupt Mode
    to one of three possible options, assuming that the option is valid for the
    Rx mode selected.

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance
    interruptMode     Any of: ZL5011X_DMA_NO_INTERRUPT,
                              ZL5011X_DMA_INTERRUPT_ON_PACKET,
                              ZL5011X_DMA_INTERRUPT_ON_FINISH
 Outputs:
    None

 Returns:
   zlStatusE

 Remarks:
    This function must be run AFTER zl5011xCpuDmaSetRxMode to ensure the
    interrupts are valid for the Rx mode selected

*******************************************************************************/
extern zlStatusE zl5011xCpuDmaSetInterruptMode(zl5011xParamsS *zl5011xParams,
                                       zl5011xDmaInterruptModeE interruptMode)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T bits = 0, bitMask = (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_INT_ALL_PKT_BIT) |
                          (ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_INT_DONE_BIT);

   ZL5011X_TRACE(ZL5011X_CPU_FN_ID,"zl5011xCpuDmaSetInterruptMode: mode %d",
         interruptMode, 0, 0, 0, 0, 0);

   switch (interruptMode)
   {
      case ZL5011X_DMA_NO_INTERRUPT: /* Supported in all Rx modes               */
         bits = 0;
         break;

      case ZL5011X_DMA_INTERRUPT_ON_PACKET:
         bits = ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_INT_ALL_PKT_BIT;
         break;

      case ZL5011X_DMA_INTERRUPT_ON_FINISH:
         /* Doesn't make sense to enable interrupt of finish if DMA is set
            to continuous - as in never finish. */
         if (zl5011xParams->cpuDmaIf.rxMode == ZL5011X_DMA_RX_CONTIN)
         {
           status = ZL5011X_PARAMETER_INVALID;
         }
         else
         {
           bits = ZL5011X_1BIT_MASK << ZL5011X_DMA_RX_INT_DONE_BIT;
         }
         break;

      default:
         status = ZL5011X_PARAMETER_INVALID;
         break;
   }

   if (status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaStoreConstatRegister(zl5011xParams,bits,bitMask,
                                                         ZL5011X_DMA_READ_WRITE);

      if (status == ZL5011X_OK)
      {
        zl5011xParams->cpuDmaIf.dmaInterruptMode = interruptMode;
      }
   }

   return(status);
}

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

 Function:
    zl5011xCpuDmaSetRxQueue

 Description:
    This function writes to the device CPU block to set the DMA Rx Queue ID
    Can be changed without stopping DMA.


 Inputs:
   zl5011xParams      Pointer to the structure for this device instance
   queueId           one of the 4 queues

 Outputs:
   None

 Returns:
   zlStatusE

 Remarks:
   None

*******************************************************************************/
extern zlStatusE zl5011xCpuDmaSetRxQueue(zl5011xParamsS *zl5011xParams,
                                 zl5011xQueueE queueId)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T bits = queueId << ZL5011X_DMA_QUEUE_ID_LSB,
           bitMask = ZL5011X_2BIT_MASK << ZL5011X_DMA_QUEUE_ID_LSB;

   ZL5011X_TRACE(ZL5011X_CPU_FN_ID,"zl5011xCpuDmaSetRxQueue: queue ID %d",
         queueId, 0, 0, 0, 0, 0);
   status = ZL5011X_CHECK_QUEUE_NUMBER(queueId);
   if (status == ZL5011X_OK)
   {
      status = zl5011xCpuDmaStoreConstatRegister(zl5011xParams,bits,bitMask,
                                                        ZL5011X_DMA_READ_WRITE);

      if (status == ZL5011X_OK)
      {
         /* update structure */
         zl5011xParams->cpuDmaIf.dmaQueueId= queueId;
      }
   }

   return(status);
}

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

 Function:
   zl5011xCpuDmaSetRxControl

 Description:
    This function writes to the device CPU block to set the DMA Rx control mode.

 Inputs:
   zl5011xParams      Pointer to the structure for this device instance
   rxControlMode     Any of: ZL5011X_DMA_DISABLED,
                             ZL5011X_DMA_ENABLED

 Outputs:
   None

 Returns:
   zlStatusE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久蜜臀aⅴ四虎| 成人黄色免费短视频| jlzzjlzz欧美大全| 免费人成精品欧美精品 | 91免费看片在线观看| 狠狠色丁香婷婷综合久久片| 日本美女一区二区| 午夜精品一区在线观看| 亚洲一区二区三区三| 亚洲一区二区欧美激情| 亚洲一区二区三区在线播放| 亚洲国产精品一区二区www在线| 亚洲黄色小视频| 亚洲精品欧美综合四区| 专区另类欧美日韩| 亚洲制服丝袜av| 日韩电影在线免费| 青青草原综合久久大伊人精品优势 | 欧美精品99久久久**| 在线观看视频欧美| 欧美日韩一区二区在线视频| 欧美日韩国产首页在线观看| 欧美高清视频一二三区| 日韩欧美国产一区二区在线播放| 欧美精品一区二区三区在线| 欧美国产日韩a欧美在线观看| 中文字幕在线一区二区三区| 亚洲免费av高清| 婷婷夜色潮精品综合在线| 久久se精品一区二区| 成人动漫av在线| 欧美亚州韩日在线看免费版国语版| 777久久久精品| 久久精品人人做| 一级特黄大欧美久久久| 日欧美一区二区| 久草精品在线观看| 91在线观看视频| 日本高清不卡视频| 久久日一线二线三线suv| 亚洲精选视频在线| 精一区二区三区| 一本到高清视频免费精品| 欧美mv日韩mv亚洲| 亚洲女同一区二区| 国产丶欧美丶日本不卡视频| 色噜噜狠狠一区二区三区果冻| 精品久久人人做人人爰| 亚洲欧洲国产日本综合| 激情综合色播激情啊| 色综合久久综合网97色综合| 久久综合色8888| 亚洲国产日韩a在线播放性色| 国产suv一区二区三区88区| 欧美电影在线免费观看| 亚洲欧美另类图片小说| 国产91精品一区二区麻豆网站| 制服丝袜av成人在线看| 亚洲裸体xxx| 成人性生交大片免费看在线播放| 91精品欧美综合在线观看最新 | 亚洲另类在线一区| 国产91在线看| 久久亚洲免费视频| 亚洲国产美女搞黄色| aaa国产一区| 久久精品视频一区二区| 午夜精品久久久久久久99水蜜桃| 国产二区国产一区在线观看| 亚洲精品一区二区三区蜜桃下载| 亚洲免费观看高清完整版在线| 麻豆视频观看网址久久| 91精品国产综合久久香蕉麻豆| 一区2区3区在线看| 欧美亚洲国产一区二区三区| 综合亚洲深深色噜噜狠狠网站| 国产精品一区二区你懂的| 日韩欧美高清一区| 美脚の诱脚舐め脚责91| 日韩三级伦理片妻子的秘密按摩| 亚洲国产精品一区二区久久恐怖片| 色狠狠色狠狠综合| 亚洲国产毛片aaaaa无费看| 色综合久久久久久久久| 一区二区免费在线播放| 在线精品视频一区二区三四| 一区二区日韩电影| 欧美日韩一级视频| 免费不卡在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 国产夫妻精品视频| 国产精品国产三级国产普通话蜜臀 | 欧美在线制服丝袜| 亚洲成人免费在线观看| 欧美精选午夜久久久乱码6080| 天堂资源在线中文精品| 日韩欧美三级在线| 国产黄色精品网站| 亚洲精选视频免费看| 91精品国产免费| 国产精品一区一区三区| 国产精品久久久一本精品 | 石原莉奈在线亚洲二区| 欧美一区二区啪啪| 丰满少妇久久久久久久| 最新国产精品久久精品| 欧美日韩性生活| 国产一区在线看| 一区二区三区四区不卡在线| 777奇米四色成人影色区| 丰满少妇久久久久久久| 亚洲人成网站影音先锋播放| 欧美高清一级片在线| 国产一区二三区好的| 亚洲综合无码一区二区| 欧美一区在线视频| 本田岬高潮一区二区三区| 亚洲福利视频一区| 国产精品免费网站在线观看| 在线免费观看一区| 国产成人免费视频网站 | 日韩伦理av电影| 91精品国产综合久久久久久久久久 | 亚洲va国产va欧美va观看| 精品成a人在线观看| 一本久久a久久精品亚洲| 国产一区二区免费看| 亚洲一区二区美女| 国产精品你懂的在线欣赏| 欧美一卡二卡三卡四卡| 99re热这里只有精品免费视频| 麻豆专区一区二区三区四区五区| 亚洲最大成人网4388xx| 国产精品免费aⅴ片在线观看| 制服丝袜亚洲网站| 欧美在线免费观看视频| 国产999精品久久| 国产精品一区二区久激情瑜伽| 久久综合999| 亚洲精品一区二区三区蜜桃下载 | 精品1区2区3区| 成人av在线网站| 精品亚洲国产成人av制服丝袜| 午夜精品福利一区二区三区蜜桃| 中文字幕精品—区二区四季| 久久人人超碰精品| 精品少妇一区二区三区日产乱码| 欧美日韩色一区| 日本高清视频一区二区| 91久久免费观看| 91丨九色丨蝌蚪富婆spa| 99国产一区二区三精品乱码| 国产99久久久国产精品免费看 | 91在线观看地址| 成人免费视频视频| 成人蜜臀av电影| 韩国三级在线一区| 国产精品亚洲专一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 亚洲精品视频一区二区| 亚洲一二三四久久| 午夜精品影院在线观看| 一区二区三区美女| 亚洲男人的天堂在线aⅴ视频| 亚洲欧美欧美一区二区三区| 亚洲久草在线视频| 日日夜夜免费精品视频| 日韩国产在线观看一区| 日韩中文字幕1| 免费成人av资源网| 国产精品18久久久久久久久| 国产成人免费在线视频| www.亚洲国产| 欧美日韩亚洲综合| 日韩午夜精品视频| 国产三级一区二区| 亚洲欧洲在线观看av| 亚洲综合久久av| 日韩av二区在线播放| 国产一区二区导航在线播放| 国产成人精品1024| 在线观看91视频| 久久一区二区三区国产精品| 中文字幕亚洲区| 日韩和欧美一区二区| 久久国产剧场电影| 色综合av在线| 日韩美女在线视频| 亚洲欧美国产三级| 久久精品噜噜噜成人88aⅴ| 成人av高清在线| 日韩视频永久免费| 国产精品美女久久久久aⅴ | 国内外成人在线视频| 成a人片亚洲日本久久| 91精品国产综合久久久久久漫画| 国产精品区一区二区三| 视频一区在线视频| 99精品偷自拍| 久久久不卡影院|