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

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

?? zl5011xmisc.c

?? Zalink50114----TDMoIP芯片驅動源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*******************************************************************************
*
*  File name:              zl5011xMisc.c
*
*  Version:                16
*
*  Author:                 MRC
*
*  Date created:           12/09/2002
*
*  Copyright 2002, 2003, 2004, 2005, Zarlink Semiconductor Limited.
*  All rights reserved.
*
*  Module Description:
*
*  This file contains miscellanous high level API functions.
*
*  Revision History:
*
*  Rev:  Date:       Author:  Comments:
*  1     12/09/2002  MRC      Creation
*  2     13/09/2002  MRC      Added PHY access functions
*  3     20/09/2002  MRC      Added Release and Revision fn
*  4     25/10/2002  MRC      Added parameter check fns
*  5     30/10/2002  MRC      Added active check to the check context fns
*  6     31/10/2002  MRC      Added variants + minor fixes
*  7     13/11/2002  MRC      Tidied up create, free and reset fns
*  8     10/01/2003  MRC      Changed timeout define used in GetDevice
*  9     21/02/2003  MRC      Added packet checksum functions
*  10    29/07/2003  APL      Added support for devices with no TDM interface
*                             Renamed global wanLimits structure to devLimits
*  11    26/07/2004  MRC      Fixed some compiler warnings
*  12    29/07/2004  MRC      Fixed some compiler warnings
*  13    13/09/2004  APL      Support for Lan-to-Lan contexts added
*  14    21/01/2005  MRC      Revised context checks
*  15    17/03/2005  APL      Allows semaphores to be deleted without taking first
*  16    18/03/2005  APL      Updated comment for zl5011xDeleteSemaphoreEx
*
*******************************************************************************/

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

#include "zl5011xApi.h"
#include "zl5011xMisc.h"
#include "zl5011xApiVersion.h"
#include "zl5011xApiRelease.h"

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

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

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

 Function:
    zl5011xCreateDeviceStructInit

 Description:
   Initialises structure used by zl5011xCreateDevice function.

 Inputs:
   par            Pointer to the structure for configuration items.
                  See main function

 Returns:
   zlStatusE

 Remarks:
    None

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

zlStatusE zl5011xCreateDeviceStructInit(zl5011xCreateDeviceS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(par, par);

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_LAN_FN_ID,
            "zl5011xCreateDeviceStructInit:",
            0, 0, 0, 0, 0, 0);

      par->baseAddress = (Uint32T)ZL5011X_INVALID;
   }

   return status;
}

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

 Function:
    zl5011xCreateDevice

 Description:
   Allocates and initialises the memory required for the device structure.

 Inputs:
   par            Pointer to the structure for configuration items. See below:

 Outputs
   zl5011xParams   Pointer to the initialised device structure

 Structure inputs:
   baseAdd        base address of the device

 Structure outputs:
   None

 Returns:
   zlStatusE

 Remarks:
    None

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

zlStatusE zl5011xCreateDevice(zl5011xParamsS **zl5011xParams, zl5011xCreateDeviceS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_MISC_FN_ID,
            "zl5011xCreateDevice: base address %08X",
            par->baseAddress, 0, 0, 0, 0, 0);

      *zl5011xParams = (zl5011xParamsS *)OS_CALLOC(sizeof(zl5011xParamsS), 1);

      if (*zl5011xParams == NULL)
      {
         status = ZL5011X_RTOS_MEMORY_FAIL;
      }
      else
      {
         if (par->baseAddress == (Uint32T)ZL5011X_INVALID)
         {
            status = ZL5011X_PARAMETER_INVALID;
         }
         else
         {
            (*zl5011xParams)->baseAdd = par->baseAddress;
         }
      }
   }

   if (status == ZL5011X_OK)
   {
      status = zl5011xCreateSemaphore(*zl5011xParams);
   }

   if (status != ZL5011X_OK)
   {
      if (*zl5011xParams != NULL)
      {
         OS_FREE(*zl5011xParams);
      }
   }

   return status;
}

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

 Function:
    zl5011xResetStructInit

 Description:
   Initialises structure used by zl5011xReset function.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items.
                  See main function

 Returns:
   zlStatusE

 Remarks:
    None

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

zlStatusE zl5011xResetStructInit(zl5011xParamsS *zl5011xParams, zl5011xResetS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_LAN_FN_ID,
            "zl5011xResetStructInit:",
            0, 0, 0, 0, 0, 0);

      /* Default behaviour is to take the device and phy semaphores before the reset */
      par->takeDeviceBeforeReset = ZL5011X_TRUE;
      par->takePhyBeforeReset = ZL5011X_TRUE;
   }

   return status;
}

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

 Function:
    zl5011xReset

 Description:
   Resets the device and initialises the device structure.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items. See below:

 Outputs:
   None

 Structure inputs:
   None

 Structure outputs:
   None

 Returns:
   zlStatusE

 Remarks:
    None

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

zlStatusE zl5011xReset(zl5011xParamsS *zl5011xParams, zl5011xResetS *par)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T baseAdd;
   OS_MUTEX_ID deviceConfigCopy;
   OS_MUTEX_ID lanPhyAccessCopy;
   zl5011xBooleanE takenDevice = ZL5011X_FALSE;
   zl5011xBooleanE takenPhy = ZL5011X_FALSE;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

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

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_MISC_FN_ID,
            "zl5011xReset: device %08X",
            (Uint32T)zl5011xParams, 0, 0, 0, 0, 0);

      /* check that any DMA has been disabled on the device */
      if ((zl5011xParams->osExclusion.dmaRxEnabled == ZL5011X_TRUE) ||
         (zl5011xParams->osExclusion.dmaTxEnabled == ZL5011X_TRUE))
      {
         status = ZL5011X_DMA_RUNNING;
      }
   }

   if (status == ZL5011X_OK)
   {
      /* check that the interrupts have been diabled for the device */
      if (zl5011xParams->osExclusion.interruptsEnabled== ZL5011X_TRUE)

      {
         status = ZL5011X_INTERRUPTS_RUNNING;
      }
   }

   if (status == ZL5011X_OK)
   {
      /* make a copy of the config semaphore, so that it can be reistated after
         the reset */
      deviceConfigCopy = zl5011xParams->osExclusion.deviceConfigExclusion;

      if (par->takeDeviceBeforeReset == ZL5011X_TRUE)
      {
         status = zl5011xGetDevice(zl5011xParams, ZL5011X_FALSE);

         if (status == ZL5011X_OK)
         {
            takenDevice = ZL5011X_TRUE;
         }
      }
   }

   if (status == ZL5011X_OK)
   {
      /* make a copy of the lan phy semaphore, so that it can be reistated after
         the reset */
      lanPhyAccessCopy = zl5011xParams->osExclusion.lanPhyAccessExclusion;

      if (par->takePhyBeforeReset == ZL5011X_TRUE)
      {
         status = zl5011xGetLanPhy(zl5011xParams, ZL5011X_FALSE);

         if (status == ZL5011X_OK)
         {
            takenPhy = ZL5011X_TRUE;
         }
      }
   }


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

   if (status == ZL5011X_OK)
   {
        /*2004-03-01 modified by ZhengQis, make a copy of slotnum and macAddr*/
        int slot;
        UINT8  macAddr[2][ZL5011X_MAC_SIZE];
        slot = zl5011xParams->slotNum;
        memcpy(macAddr[0], zl5011xParams->macAddress[0], ZL5011X_MAC_SIZE * 2);

      /* clear up the device structure since it has now been reset */
      baseAdd = zl5011xParams->baseAdd;
      (void)memset(zl5011xParams, 0x00, sizeof(zl5011xParamsS));
      zl5011xParams->baseAdd = baseAdd;
      zl5011xParams->slotNum = slot;
      memcpy(zl5011xParams->macAddress[0], macAddr[0], ZL5011X_MAC_SIZE * 2);
      zl5011xParams->osExclusion.deviceConfigExclusion = deviceConfigCopy;
      zl5011xParams->osExclusion.lanPhyAccessExclusion = lanPhyAccessCopy;

      /* wait for the device to complete reset */
      OS_TASK_DELAY(ZL5011X_WAIT_100MS);
   }

   /* give up any semaphores taken - ignore return codes, since they
      all need to be released anyway. */
   if (takenDevice == ZL5011X_TRUE)
   {
      (void)zl5011xReleaseDevice(zl5011xParams);
   }

   if (takenPhy == ZL5011X_TRUE)
   {
      (void)zl5011xReleaseLanPhy(zl5011xParams);
   }

   return status;
}

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

 Function:
    zl5011xFreeDeviceStructInit

 Description:
   Initialises structure used by zl5011xFreeDevice function.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance
   par            Pointer to the structure for configuration items.
                  See main function

 Returns:
   zlStatusE

 Remarks:
    None

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

zlStatusE zl5011xFreeDeviceStructInit(zl5011xParamsS *zl5011xParams, zl5011xFreeDeviceS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_LAN_FN_ID,
            "zl5011xFreeDeviceStructInit:",
            0, 0, 0, 0, 0, 0);

      /* Default behaviour is to take the semaphores before deleting them */
      par->takeDeviceBeforeSemDelete = ZL5011X_TRUE;
      par->takePhyBeforeSemDelete = ZL5011X_TRUE;
   }

   return status;
}

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

 Function:
    zl5011xFreeDevice

 Description:
   Free up the memory used for a device instance

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance

 Outputs:
   None

 Returns:
   zlStatusE

 Remarks:
    None

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

zlStatusE zl5011xFreeDevice(zl5011xParamsS *zl5011xParams, zl5011xFreeDeviceS *par)
{
   zlStatusE status = ZL5011X_OK;

   /* do some parameter checking */
   status = ZL5011X_CHECK_POINTERS(zl5011xParams, par);

   /* main function code starts */

   if (status == ZL5011X_OK)
   {
      ZL5011X_TRACE(ZL5011X_MISC_FN_ID,
            "zl5011xFreeDevice: struct %08X",
            (Uint32T)zl5011xParams, 0, 0, 0, 0, 0);
   }

   if (status == ZL5011X_OK)
   {
      /* check that any DMA has been disabled on the device */
      if ((zl5011xParams->osExclusion.dmaRxEnabled == ZL5011X_TRUE) ||
         (zl5011xParams->osExclusion.dmaTxEnabled == ZL5011X_TRUE))
      {
         status = ZL5011X_DMA_RUNNING;
      }
   }

   if (status == ZL5011X_OK)
   {
      /* check that the interrupts have been disabled for the device */
      if (zl5011xParams->osExclusion.interruptsEnabled== ZL5011X_TRUE)

      {
         status = ZL5011X_INTERRUPTS_RUNNING;
      }
   }

   if (status == ZL5011X_OK)
   {
      status = zl5011xDeleteSemaphoreEx(zl5011xParams, par->takeDeviceBeforeSemDelete,
                                       par->takePhyBeforeSemDelete);
   }

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

   return status;
}

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

 Function:
    zl5011xEnterFreezeMode

 Description:
   Forces the device into freeze mode.

 Inputs:
   zl5011xParams   Pointer to the structure for this device instance

 Outputs:
   None

 Returns:
  zlStatusE

 Remarks:
   None

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

zlStatusE zl5011xEnterFreezeMode(zl5011xParamsS *zl5011xParams)
{
   zlStatusE status = ZL5011X_OK;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三免费高清| 亚洲成人自拍网| 欧美精品一区视频| 欧美喷潮久久久xxxxx| 欧美性猛交一区二区三区精品| 91在线国内视频| eeuss鲁一区二区三区| 成人av资源网站| av不卡免费在线观看| www.欧美精品一二区| 99精品黄色片免费大全| 成人av网在线| 色综合中文综合网| 亚洲欧美自拍偷拍色图| 国产精品麻豆久久久| 韩国精品免费视频| 亚洲精品国产无套在线观| 精品国产不卡一区二区三区| 午夜亚洲福利老司机| heyzo一本久久综合| 一本到一区二区三区| 色综合久久综合| 欧美综合在线视频| 91精品久久久久久久99蜜桃| 日韩美女一区二区三区四区| 久久久99精品免费观看不卡| 中文字幕一区二区视频| 一区二区三国产精华液| 亚洲国产三级在线| 久久综合综合久久综合| 国产乱人伦精品一区二区在线观看| 国产福利一区二区三区| 91在线码无精品| 欧美二区乱c少妇| 久久久久久免费毛片精品| 国产精品久久久久久久久免费相片| 亚洲免费在线播放| 麻豆免费精品视频| 欧美电视剧在线看免费| 国产午夜精品久久久久久久| 亚洲丝袜美腿综合| 亚洲gay无套男同| 久久99久久精品| kk眼镜猥琐国模调教系列一区二区 | 亚洲精品免费在线观看| 日韩精品每日更新| 国产传媒欧美日韩成人| 色婷婷亚洲婷婷| 日韩女同互慰一区二区| 国产精品盗摄一区二区三区| 日韩电影在线免费看| 粉嫩嫩av羞羞动漫久久久| 欧美日韩午夜影院| 国产欧美一区二区精品婷婷| 亚洲国产综合在线| 国产成人欧美日韩在线电影| 欧美三级电影在线看| 中文字幕精品一区| 日韩高清不卡一区二区三区| 成人黄色小视频| 欧美一区二区三区公司| 136国产福利精品导航| 久久99国产乱子伦精品免费| 91精品办公室少妇高潮对白| 久久亚洲春色中文字幕久久久| 亚洲一区自拍偷拍| 成人午夜又粗又硬又大| 日韩欧美精品三级| 亚洲自拍偷拍欧美| 成人美女在线视频| 精品福利av导航| 午夜a成v人精品| 一本色道a无线码一区v| 国产三级精品在线| 美女视频黄频大全不卡视频在线播放| 色欲综合视频天天天| 国产三区在线成人av| 国产又粗又猛又爽又黄91精品| 欧美日韩亚洲综合一区二区三区| 国产精品久久久久影院色老大 | 97aⅴ精品视频一二三区| 精品国产露脸精彩对白| 日本美女一区二区三区视频| 欧美视频一区二区三区四区| 自拍偷拍亚洲欧美日韩| 成人一区二区三区在线观看 | 日韩电影免费一区| 在线观看亚洲a| 亚洲欧洲精品天堂一级| 粉嫩在线一区二区三区视频| 精品国产一区二区亚洲人成毛片| 午夜精品一区在线观看| 色综合久久88色综合天天6| 国产精品免费av| 福利一区福利二区| 久久综合狠狠综合| 久久99久国产精品黄毛片色诱| 欧美区一区二区三区| 午夜影视日本亚洲欧洲精品| 欧美色精品在线视频| 夜色激情一区二区| 欧美性一区二区| 亚洲午夜激情网站| 欧美亚洲动漫精品| 亚洲一区二三区| 欧美视频中文一区二区三区在线观看 | 中文字幕av在线一区二区三区| 国产麻豆精品视频| 久久久久久久久蜜桃| 国产福利不卡视频| 欧美国产精品中文字幕| 国产精品91一区二区| 日本一区二区综合亚洲| 成人一区二区三区| 自拍偷自拍亚洲精品播放| 一本久久a久久免费精品不卡| 亚洲激情成人在线| 欧美日韩一区 二区 三区 久久精品| 一区二区三区欧美亚洲| 欧美日韩一级大片网址| 蜜桃视频一区二区| 26uuu亚洲综合色欧美| 韩国午夜理伦三级不卡影院| 国产亚洲制服色| 成人免费三级在线| 亚洲欧美日韩精品久久久久| 欧美日韩不卡一区| 久久国产精品无码网站| 国产色一区二区| 91久久香蕉国产日韩欧美9色| 视频一区在线播放| 久久久欧美精品sm网站| 91免费版在线| 免费观看成人av| 国产精品素人一区二区| 91成人免费电影| 日本aⅴ精品一区二区三区| 国产午夜精品一区二区三区嫩草| 99久久婷婷国产| 日韩不卡在线观看日韩不卡视频| 久久夜色精品国产噜噜av| av成人免费在线观看| 午夜视频一区二区三区| 精品国产伦理网| 91视频xxxx| 久久精品国产网站| 国产精品欧美精品| 欧美无人高清视频在线观看| 黄页视频在线91| 亚洲欧美另类图片小说| 日韩丝袜美女视频| 99久久免费精品高清特色大片| 亚洲电影一区二区| 国产欧美视频一区二区| 欧美吻胸吃奶大尺度电影| 国产激情一区二区三区| 亚洲gay无套男同| 国产精品国产三级国产aⅴ中文 | 亚洲综合一区在线| 久久综合中文字幕| 欧美性三三影院| 国产精品一区二区视频| 亚洲成人免费在线| 国产精品久线在线观看| 精品日韩成人av| 欧美日韩一区二区欧美激情| 波多野洁衣一区| 久久99这里只有精品| 亚洲综合一二三区| 国产精品国产三级国产| 2021久久国产精品不只是精品| 欧美性大战久久久| 99视频精品全部免费在线| 国产一区二区美女| 天天色综合天天| 一卡二卡三卡日韩欧美| 亚洲国产精品精华液2区45| 91精品国产综合久久久久久久久久 | 国产精品国产三级国产有无不卡 | 国产精品理论片| 久久综合狠狠综合久久综合88| 欧美精品v国产精品v日韩精品 | 国产欧美一区二区精品忘忧草 | 亚洲va韩国va欧美va| 国产精品久久久久久久蜜臀| 久久这里只有精品6| 91精品国产色综合久久不卡蜜臀| 日本久久一区二区| av男人天堂一区| 国产成人精品亚洲777人妖| 国产一区二区看久久| 经典三级在线一区| 秋霞成人午夜伦在线观看| 亚洲午夜免费电影| 亚洲九九爱视频| 亚洲卡通动漫在线| 亚洲精品乱码久久久久| 亚洲天堂精品在线观看| 一色屋精品亚洲香蕉网站| 欧美国产精品一区|