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

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

?? csend.c

?? cs8900在vxworks系統下的驅動
?? 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一区二区三区免费野_久草精品视频
在线影院国内精品| 91视频.com| 五月激情综合婷婷| 亚洲免费在线观看视频| 亚洲人成网站影音先锋播放| 国产丝袜在线精品| 亚洲国产高清aⅴ视频| 国产精品久久久久三级| 国产精品美女久久久久久2018| 国产精品久久久久久久久晋中| 欧美国产欧美亚州国产日韩mv天天看完整| 久久先锋资源网| 国产精品系列在线| 亚洲精品乱码久久久久| 亚洲福利一区二区三区| 视频一区中文字幕| 国产一区二区三区在线观看精品| 国产精品白丝av| 91色在线porny| 欧美亚洲精品一区| 日韩午夜小视频| 久久久另类综合| 亚洲欧洲在线观看av| 亚洲国产精品一区二区久久| 日本一道高清亚洲日美韩| 久久精品国产免费| 国产98色在线|日韩| 在线免费观看日韩欧美| 正在播放一区二区| 国产欧美日韩另类一区| 一区二区在线观看视频| 久久国产综合精品| 97国产一区二区| 欧美一区二区成人| 中文成人av在线| 日韩高清在线观看| 成年人网站91| 91精品国产综合久久国产大片| 国产欧美日韩另类视频免费观看| 亚洲六月丁香色婷婷综合久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产iv一区二区三区| 欧美日本一道本| 久久久精品影视| 亚洲一二三四在线观看| 国产精品资源网| 在线播放亚洲一区| 亚洲免费大片在线观看| 国模冰冰炮一区二区| 精品视频999| 国产精品国产三级国产普通话99 | 久久精品99久久久| 99久久婷婷国产综合精品| 日韩欧美色综合网站| 亚洲日本一区二区| 国产成人在线视频免费播放| 日韩一级精品视频在线观看| 亚洲欧美一区二区三区极速播放| 极品瑜伽女神91| 欧美猛男gaygay网站| 亚洲女爱视频在线| 成人a区在线观看| 久久久不卡影院| 狠狠狠色丁香婷婷综合久久五月| 欧美日韩中文字幕一区二区| 亚洲欧洲日产国码二区| 国产91精品精华液一区二区三区| 日韩欧美国产一区在线观看| 天堂成人免费av电影一区| 欧美天堂一区二区三区| 亚洲人成精品久久久久| av在线不卡电影| 国产精品久久久久一区二区三区| 国产成人精品免费网站| 国产日本欧美一区二区| 国产乱妇无码大片在线观看| 久久综合999| 国产美女精品一区二区三区| 久久嫩草精品久久久精品一| 国产精品影视天天线| 久久丝袜美腿综合| 国产精品18久久久久久久久| 国产欧美一区二区在线| 成人一区在线观看| 中文字幕综合网| 一本色道久久综合亚洲91 | 91麻豆精品国产91久久久久久久久| 樱桃国产成人精品视频| 欧美视频在线一区二区三区| 夜夜爽夜夜爽精品视频| 91精品免费在线| 老汉av免费一区二区三区 | 成人免费在线观看入口| 91蜜桃视频在线| 无吗不卡中文字幕| 久久精品一区二区三区不卡 | 久久一日本道色综合| 国产精品99久久久久久有的能看| 欧美国产日韩a欧美在线观看 | 久久综合色8888| 国产mv日韩mv欧美| 亚洲国产精品麻豆| 26uuu亚洲综合色欧美| www.亚洲人| 日韩在线a电影| 国产精品网站在线观看| 欧美日韩一区在线| 国产真实乱偷精品视频免| 亚洲人成精品久久久久久| 91精品国产综合久久久久久久久久| 精品系列免费在线观看| 亚洲天堂福利av| 日韩精品综合一本久道在线视频| 高清不卡一二三区| 天天免费综合色| 亚洲婷婷综合久久一本伊一区| 在线成人午夜影院| 91美女在线看| 九色综合国产一区二区三区| 亚洲男人天堂一区| 欧美精品一区二区三区在线播放| 色综合咪咪久久| 国产成人免费9x9x人网站视频| 亚洲风情在线资源站| 国产精品久久久久久久久久免费看 | 不卡的电影网站| 久久精品国产亚洲a| 亚洲图片欧美色图| 国产精品视频线看| 久久人人97超碰com| 欧美另类高清zo欧美| 一本一道久久a久久精品综合蜜臀| 久久99久久久久| 午夜精品久久一牛影视| 亚洲欧美另类在线| 日本一区二区免费在线| 日韩欧美在线影院| 制服丝袜日韩国产| 欧美日本国产视频| 欧美午夜精品久久久久久孕妇| www.欧美色图| 成人妖精视频yjsp地址| 国产精品一区三区| 国产精品一区不卡| 国产一区二区三区美女| 丝瓜av网站精品一区二区 | 国产欧美精品在线观看| 久久综合色8888| 久久亚洲精品小早川怜子| 精品少妇一区二区三区在线播放 | 亚洲福利电影网| 一区二区三区欧美日韩| 亚洲男同性恋视频| 亚洲一区二区欧美日韩| 亚洲国产精品久久久男人的天堂| 亚洲精品五月天| 亚洲一二三四区| 日韩精品视频网站| 毛片不卡一区二区| 久久97超碰色| 国产精一区二区三区| 国产福利一区二区三区| 不卡一区中文字幕| 一本色道亚洲精品aⅴ| 欧美午夜一区二区三区免费大片| 色综合色狠狠天天综合色| 欧美日韩免费观看一区三区| 欧美精品少妇一区二区三区 | 加勒比av一区二区| 成人h动漫精品一区二区| 99久久99久久久精品齐齐| 91国偷自产一区二区三区成为亚洲经典 | 亚洲综合免费观看高清完整版在线 | 蜜桃av一区二区三区| 国产在线视视频有精品| 成人动漫精品一区二区| 91久久精品日日躁夜夜躁欧美| 欧美无砖专区一中文字| 精品成人一区二区三区| 国产精品伦一区二区三级视频| 亚洲精品亚洲人成人网| 看电视剧不卡顿的网站| 9i在线看片成人免费| 欧美日韩精品欧美日韩精品| 精品国产免费人成在线观看| 国产精品久久久久久户外露出 | 中文字幕第一区综合| 亚洲欧美二区三区| 另类专区欧美蜜桃臀第一页| 成人激情动漫在线观看| 91精品国产品国语在线不卡| 中文一区二区在线观看| 爽好多水快深点欧美视频| 国产成人精品亚洲午夜麻豆| 欧美日韩中字一区| 国产精品成人一区二区艾草| 美美哒免费高清在线观看视频一区二区| 国产精品18久久久久久久久 | 91猫先生在线| 日韩精品一区二区三区在线观看|