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

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

?? csend.c

?? CS8900的Vxworks驅動源代碼 1.0
?? C
?? 第 1 頁 / 共 5 頁
字號:
    if( errorCount != 0 )
    {
#ifdef CS_DEBUG_ENABLE
        logMsg("csVerifyChip: ERROR SRAM test failed, errorCount %d\n", 
                errorCount,0,0,0,0,0 );
#endif
       return( ERROR );
    }

    return OK;
}


/*******************************************************************************
*
* csStart - start the device
*
* This function calls BSP functions to connect interrupts and start the
* device running in interrupt mode.
*
* RETURNS: OK or ERROR
*
*/

LOCAL STATUS csStart(END_OBJ *pV )
{
CS_END_DEVICE *pCS;

/* @Conexant ARM 940 specific code 
extern CS_END_DEVICE *EndObject;
*/
   pCS=(CS_END_DEVICE *)pV;


/* @Conexant ARM 940 specific code 
   EndObject = pCS;
*/
  
   
/* For @Conexant ARM 940 User: 
Comment out the following code.*/ 
   /* Setup the interrupt handler and the IDT table entry */
   if ( intConnect(INUM_TO_IVEC((ULONG)pCS->IntVector), csIntr, (int)pCS) == ERROR )
   {
#ifdef CS_DEBUG_ENABLE
      logMsg("csStart: CS_END_DEVICE %d, Can not connect intertupt\n", 
         pCS->unit,0,0,0,0,0 );
#endif
      return NULL;
   }



#ifdef CS_DEBUG_ENABLE
   logMsg("csStart: unit=%d, Initializing interface\n",
           pCS->unit, 0,0,0,0,0 );
#endif

   /* Initialize the chip */
   csInitChip( pCS );

   /* Enable CS8900 interrupts at the system level */
   if ( sysEnetIntEnable(pCS) == ERROR )
   {
#ifdef CS_DEBUG_ENABLE
      logMsg("csStart: CS_END_DEVICE %d, sysEnetIntEnable failed\n", 
              pCS->unit,0,0,0,0,0 );
#endif
      return( NULL );
   }


   /* Mark the interface as up and running */
   END_FLAGS_SET (&pCS->end, IFF_UP | IFF_RUNNING);

   return OK;
}

/*******************************************************************************
*
* csStop - stop the device
*
* This function calls BSP functions to disconnect interrupts and stop
* the device from operating in interrupt mode.
*
* RETURNS: OK or ERROR.
*/
LOCAL STATUS csStop(END_OBJ *pV)
{
CS_END_DEVICE *pCS;

   pCS=(CS_END_DEVICE *)pV;

   /* disable CS8900 interrupts at the system level */
   if ( sysEnetIntDisable(pCS) == ERROR )
   {
#ifdef CS_DEBUG_ENABLE
      logMsg("csStop: CS_END_DEVICE %d, sysEnetIntDisable failed\n", 
              pCS->unit,0,0,0,0,0 );
#endif
      return( NULL );
   }

   /* set the flags to indicate NIC status */ 
   /* Mark the interface as down */
   END_FLAGS_CLR (&pCS->end, IFF_UP | IFF_RUNNING);

   /* Stop the chip */
   if ( csResetChip(pCS) == ERROR )
   {
#ifdef CS_DEBUG_ENABLE
      logMsg("csStop: CS_END_DEVICE %d, Can not reset the chip\n",
              pCS->unit, 0,0,0,0,0 );
#endif
      return ERROR;
   }


#ifdef CS_DEBUG_ENABLE
   logMsg("csStop(): unit=%d, The CS8900 device has been stopped.\n", 
            pCS->unit,0,0,0,0,0 );
#endif


   return OK;
}


/******************************************************************************
*
* csUnload - unload a driver from the system
*
* This function first brings down the device, and then frees any
* stuff that was allocated by the driver in the load function.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS csUnload ( END_OBJ *pV        /* device to be unloaded */
    )
{
CS_END_DEVICE *pCS;

   pCS=(CS_END_DEVICE *)pV;

   END_OBJECT_UNLOAD (&pCS->end);
#ifdef CS_DEBUG_ENABLE
   logMsg("csUnLoad(): unit=%d, CS8900 driver is unloaded!\n", 
           pCS->unit,0,0,0,0,0 );
#endif
   return (OK);
}

/*******************************************************************************
*
* csIoctl -
*
* This routine is a major entry point and is called by the protocol stack to
* modify characteristics of this network interface driver.  
*/
LOCAL int csIoctl(     
    END_OBJ *pV,        /* device receiving command */
    int cmd,                        /* ioctl command code */
    caddr_t data                /* command argument */
    )
{
int status = 0;
long value;
CS_END_DEVICE *pCS;

   pCS=(CS_END_DEVICE *)pV;

   switch( cmd )
   {
      case EIOCSADDR:
         if (data == NULL)
            return (EINVAL);
         bcopy ((char *)data, (char *)END_HADDR(&pCS->end), 
                END_HADDR_LEN(&pCS->end));
         bcopy( (char *)data, (char *)pCS->enetAddr, 6);
         csConfig(pCS);
         break;
      case EIOCGADDR:
         if (data == NULL) return (EINVAL);
         bcopy ((char *)END_HADDR(&pCS->end), (char *)data,
                END_HADDR_LEN(&pCS->end));
         break;
      case EIOCSFLAGS: /* set Promiscuous Mode */
         value = (long)data;
         if (value < 0)
         {
            value = -(--value);
            END_FLAGS_CLR (&pCS->end, value);
         }
         else
         {
            END_FLAGS_SET (&pCS->end, value);
         }
         csConfig (pCS);
         break;
      case EIOCGFLAGS:
         *(int *)data = END_FLAGS_GET(&pCS->end);
         break;
      case EIOCMULTIADD:
         status = csMCastAdd ((void*)pCS, (char *) data);
         break;
      case EIOCMULTIDEL:
         status = csMCastDel ((void*)pCS, (char *) data);
         break;
      case EIOCMULTIGET:
         status = csMCastGet ((void*)pCS, (MULTI_TABLE *) data);
         break;
      case EIOCPOLLSTART:
         csPollStart ((void*)pCS);
         break;
      case EIOCPOLLSTOP:
         csPollStop ((void*)pCS);
         break;
      case EIOCGMIB2:
         if (data == NULL) return (EINVAL);
         bcopy((char *)&pCS->end.mib2Tbl, (char *)data,
               sizeof(pCS->end.mib2Tbl));
         break;
      case EIOCGFBUF:
         if (data == NULL)
         return (EINVAL);
         *(int *)data = CS_MIN_FBUF;
         break;
      default:
         status = EINVAL;
   }


   return (status);
}


/*******************************************************************************
*
* csSend - the driver send routine
*
* This routine takes a M_BLK_ID sends off the data in the M_BLK_ID.
* The buffer must already have the addressing information properly installed
* in it.  This is done by a higher layer.    
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS csSend ( END_OBJ  *pV,        /* device ptr */
                      M_BLK_ID pMBuff   /* data to send */
)
{    
   int         oldLevel=0;
CS_END_DEVICE *pCS;

   pCS=(CS_END_DEVICE *)pV;
   /*
    * Obtain exclusive access to transmitter.  This is necessary because
    * we might have more than one stack transmitting at once.
    */

    if (!(pCS->ConfigFlags & CFGFLG_POLL_MODE))
        END_TX_SEM_TAKE (&pCS->end, WAIT_FOREVER);

    /* This is the normal case where all the data is in one M_BLK_ID */
    /* Set pointers in local structures to point to data. */
    /* place a transmit request */

    if (!(pCS->ConfigFlags & CFGFLG_POLL_MODE))
    {
	  /*  disable interrupts*/
      oldLevel=INT_LOCK();
    }
    
    /* initiate device transmit */
    csStartOutput(pCS, pMBuff);

    if (!(pCS->ConfigFlags & CFGFLG_POLL_MODE))
    {
 	  /*  enable interrupts*/
      INT_UNLOCK(oldLevel);
    }
    
    /* Advance our management index */

    if (!(pCS->ConfigFlags & CFGFLG_POLL_MODE))
        END_TX_SEM_GIVE (&pCS->end);

    return (OK);
}


/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
 * Interrupt-handler Routines                                              *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */


/*******************************************************************************
*
* csIntr -
*
* This routine in the interrupt service routine.  This routine is called by
* VxWorks wrapper code whenever the CS8900 chip generates and interrupt.  The 
* wrapper code issues an EOI command.
*
* This routine processes the events on the Interrupt Status Queue.  The events
* are read one at a time from the ISQ and the appropriate event handlers are
* called.  The ISQ is read until it is empty.  Reading a zero from the ISQ will
* deassert the interrupt request line.
*
* RETURNS: Nothing
*
*/

LOCAL void csIntr(CS_END_DEVICE *pCS)
{
   USHORT Event;

   /* Ignore any interrupts that happen while the chip is being reset */
   if( pCS->Resetting )
      return;

   /* Set locale flag */
   pCS->InISR = TRUE;
   /* Read an event from the Interrupt Status Queue */
   if( pCS->InMemoryMode )
      Event = csReadPacketPage( pCS, PKTPG_ISQ );
   else
      Event = SYS_ENET_IN_WORD( (pCS->IOAddr)+PORT_ISQ );

   /* Process all the events in the Interrupt Status Queue */
   while( Event != 0 )
   {
      /* Dispatch to an event handler based on the register number */
      switch ( Event & REG_NUM_MASK )
      {
         case REG_NUM_RX_EVENT:
            csReceiveEvent( pCS, Event );
            break;

         case REG_NUM_TX_EVENT:
            csTransmitEvent( pCS, Event );
            break;

         case REG_NUM_BUF_EVENT:
            csBufferEvent( pCS, Event );
            break;

         case REG_NUM_RX_MISS: 
            /* Read the Rx Miss count (clears the counter). */
            /* Miss count is in the 10 MSBs */
            /*pCS->ArpCom.ac_if.if_ierrors += ( (BYTE_SWAP(Event)) >> 6); */
            END_ERR_ADD (&pCS->end, MIB2_IN_ERRS,( (BYTE_SWAP(Event)) >> 6) );

#ifdef CS_DEBUG_ENABLE
            logMsg("csRxMissEvent: CS_END_DEVICE %d,, %d added to RX miss counter\n",
            pCS->unit, ( (BYTE_SWAP(Event)) >> 6),0,0,0,0 );
#endif
            break;

         case REG_NUM_TX_COL:  
            /* Read the collision counter (clears the counter). */           
            /* Collision count is in the 10 MSBs */
            pCS->Collisions += ( (BYTE_SWAP(Event)) >> 6);
        
#ifdef CS_DEBUG_ENABLE
            logMsg("csTxColEvent: CS_END_DEVICE %d, %d added to collision counter\n",
            pCS->unit, ( (BYTE_SWAP(Event)) >> 6),0,0,0,0 );
#endif
            break;
  
         default: 
#ifdef CS_DEBUG_ENABLE
            logMsg("csIntr: CS_END_DEVICE %d, Unknown interrupt event: %04X\n",
               pCS->unit, (BYTE_SWAP(Event)),0,0,0,0 );
#endif
            break;
      }

      /* Read another event from the Interrupt Status Queue */
      if ( pCS->InMemoryMode )
         Event = csReadPacketPage( pCS, PKTPG_ISQ );
      else
         Event = SYS_ENET_IN_WORD( (pCS->IOAddr)+PORT_ISQ );
   }
   
   /* Ensure task-level event handler is running */
   if( pCS->NetJobDepth < 2 )
   {
      pCS->NetJobDepth++;
      netJobAdd( (FUNCPTR)csEventHandler, (int)pCS, 0, 0, 0, 0 ); 
   }

   /* Clear locale flag */
   pCS->InISR = FALSE;
}


/*******************************************************************************
*
* csBufferEvent -
*
* The routine is called whenever an event occurs regarding the transmit and
* receive buffers within the CS8900 chip.  The only buffer events we 
* currently handle are Rdy4TX interrupts, Tx Underruns, and SW ints.
*
*/

LOCAL void csBufferEvent( CS_END_DEVICE *pCS, USHORT BufEvent )
{
USHORT BusStatus;

   if ( BufEvent & BUF_EVENT_TX_UNDR )
   {

      /* TX underrun occured */
      pCS->TxUnderruns++;

      /* Modify start command if total underruns > threshold value */
      /* by setting TX start command to next increment */
      if( pCS->TxUnderruns == CS_TX_UNDRUN_TRHSHOLD )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
555夜色666亚洲国产免| 亚洲成av人片一区二区| 亚洲一区二区欧美| 国产福利一区二区三区视频在线| 色婷婷综合激情| 久久久久久亚洲综合影院红桃| 亚洲一区在线视频| 成a人片国产精品| 精品国产三级电影在线观看| 午夜精品久久久久久久99水蜜桃| 成人免费福利片| 久久综合九色综合欧美就去吻 | 美女久久久精品| 91久久人澡人人添人人爽欧美 | 成人精品视频一区二区三区尤物| 日韩免费高清av| 天天操天天色综合| 在线观看一区不卡| 亚洲女同ⅹxx女同tv| av资源站一区| 中文字幕永久在线不卡| 成人免费毛片高清视频| www精品美女久久久tv| 久久 天天综合| 日韩欧美综合一区| 日本不卡一区二区三区| 欧美一卡二卡三卡| 日本美女一区二区三区视频| 欧美一区二区三区四区视频| 亚洲va天堂va国产va久| 欧美日韩免费一区二区三区视频 | 欧美色欧美亚洲另类二区| 最新欧美精品一区二区三区| 97久久人人超碰| 亚洲乱码一区二区三区在线观看| 色婷婷综合视频在线观看| 亚洲日本在线天堂| 欧美三级日韩三级| 亚洲一区二区视频| 欧美精品第一页| 日本不卡视频一二三区| 精品国内二区三区| 国产麻豆精品视频| 国产精品久久精品日日| 91免费版在线| 亚洲成人精品一区| 欧美tickling挠脚心丨vk| 国产成人一区二区精品非洲| 国产精品久久久久影视| 欧美性xxxxxxxx| 美国一区二区三区在线播放| 337p日本欧洲亚洲大胆精品| 成人av片在线观看| 亚洲一区在线看| 欧美精品一区二区三| 成人精品高清在线| 亚洲电影一级黄| 精品久久久久一区二区国产| 国产白丝精品91爽爽久久 | 中文字幕精品一区二区三区精品| 91在线看国产| 秋霞午夜鲁丝一区二区老狼| 久久久精品蜜桃| 欧美视频中文字幕| 韩国av一区二区三区在线观看| 国产精品久久久久久久久图文区| 欧美性大战久久| 国产成人免费高清| 亚洲v精品v日韩v欧美v专区| 国产婷婷精品av在线| 91成人国产精品| 国产一区中文字幕| 亚洲6080在线| 国产精品人妖ts系列视频| 欧美日韩免费高清一区色橹橹| 国产精品中文字幕一区二区三区| 亚洲精品国产第一综合99久久 | 51精品国自产在线| 成人精品在线视频观看| 青青草97国产精品免费观看 | 精品国产免费视频| 欧洲国内综合视频| 成人av片在线观看| 精品一区二区免费| 午夜激情一区二区三区| 中文字幕在线播放不卡一区| 久久夜色精品国产噜噜av| 欧美调教femdomvk| 99久久99精品久久久久久| 韩国精品主播一区二区在线观看 | 亚洲色欲色欲www| 久久在线免费观看| 555夜色666亚洲国产免| 91极品视觉盛宴| 成人爽a毛片一区二区免费| 免费观看在线色综合| 亚洲乱码国产乱码精品精的特点| 国产无人区一区二区三区| 777午夜精品免费视频| 在线看国产一区| 91免费在线播放| av在线一区二区三区| 国产精品一区二区久久不卡| 另类专区欧美蜜桃臀第一页| 日日夜夜精品免费视频| 五月天久久比比资源色| 亚洲电影一区二区三区| 亚洲动漫第一页| 亚洲国产欧美在线人成| 一区二区三区免费观看| 一区二区日韩av| 一级做a爱片久久| 亚洲一区二区av在线| 亚洲尤物视频在线| 午夜亚洲国产au精品一区二区| 亚洲成人三级小说| 亚洲乱码国产乱码精品精小说| 亚洲视频一区在线| 夜夜精品视频一区二区| 亚洲国产成人va在线观看天堂| 亚洲一卡二卡三卡四卡无卡久久 | 欧美一区二区三区视频在线 | 欧美激情在线一区二区三区| 国产日韩欧美a| 国产精品理论片| 亚洲精品美腿丝袜| 亚洲成人激情自拍| 久久福利资源站| 成人性生交大合| 色婷婷久久久久swag精品| 欧美偷拍一区二区| 欧美刺激午夜性久久久久久久| 精品国产乱码久久久久久免费| 亚洲精品一区二区三区99| 久久久99精品免费观看不卡| 国产精品国产三级国产三级人妇| 综合欧美亚洲日本| 日韩二区三区在线观看| 精品系列免费在线观看| zzijzzij亚洲日本少妇熟睡| 欧洲av在线精品| 日韩精品一区二区在线| 国产精品美女久久福利网站 | 亚洲婷婷综合久久一本伊一区| 亚洲一区在线播放| 国产一区二区三区综合| 99国产精品久久| 日韩一区二区三区在线视频| 欧美国产欧美综合| 亚洲一区二区av在线| 经典三级一区二区| 91热门视频在线观看| 日韩午夜激情视频| 国产精品国产三级国产专播品爱网 | 日韩精品中文字幕在线一区| 国产精品麻豆网站| 日韩精品电影在线观看| 国产成人在线视频播放| 欧美日韩国产色站一区二区三区| 日本一区二区视频在线| 日韩黄色小视频| 99精品在线观看视频| 欧美mv日韩mv| 亚洲成人av免费| 不卡的电视剧免费网站有什么| 日韩欧美在线影院| 一区二区三区精品久久久| 欧美日本一区二区三区四区| 久久久久综合网| 日韩av不卡一区二区| 91啪九色porn原创视频在线观看| 精品国产sm最大网站免费看| 亚洲综合清纯丝袜自拍| 国产精品1024| 日韩欧美一级二级三级| 亚洲激情av在线| 成人99免费视频| 国产精品无圣光一区二区| 日本不卡的三区四区五区| 欧美亚洲动漫另类| 亚洲精品高清视频在线观看| 成人黄页在线观看| 国产亚洲一区二区三区在线观看| 久久电影网电视剧免费观看| 欧美区在线观看| 亚洲激情自拍偷拍| 99精品欧美一区二区三区小说| 国产午夜亚洲精品不卡| 激情五月播播久久久精品| 欧美一级高清大全免费观看| 香蕉久久夜色精品国产使用方法| 一本大道综合伊人精品热热 | 久久精品在线观看| 国产精品白丝av| 国产午夜精品久久久久久免费视 | 日韩精品一区二区三区在线观看| 首页综合国产亚洲丝袜| 欧美精品黑人性xxxx| 日韩精品免费专区| 91精品国产一区二区三区|