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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? csend.c

?? VxWorks系統(tǒng)CS網(wǎng)卡END驅(qū)動(源碼).zip
?? C
?? 第 1 頁 / 共 5 頁
字號:

   /* Verify that it is the correct chip */
   if ( csVerifyChip(pCS) == ERROR )
   {
      LOGMSG("csEndLoad: CS_END_DEVICE %d, csVerifyChip failed\n", 
              pCS->unit,0,0,0,0,0 );
      return NULL;
   }

   /* Get any CS8900 parameters not specifed in network interface table */
   if ( sysEnetGetConfig(pCS) == ERROR )
   {
      LOGMSG("csEndLoad: CS_END_DEVICE %d, sysEnetGetConfig failed\n", 
              pCS->unit,0,0,0,0,0 );
      return NULL;
   }

   /* Get Ethernet addr in BSP-specific manner*/
   if ( sysEnetAddrGet(pCS,pCS->enetAddr) == ERROR )
   {
      LOGMSG("csEndLoad: CS_END_DEVICE %d, sysEnetAddrGet failed\n", 
         pCS->unit,0,0,0,0,0 );
      return NULL;
   }


   /* initialize the END and MIB2 parts of the structure 
    * The M2 element must come from m2Lib.h 
    * This template is set up for a DIX type ethernet device.
    */

   status1 = END_OBJ_INIT (&pCS->end, (DEV_OBJ *)pCS, (char *)CS_NAME,
                           pCS->unit, &endFuncTable,
                           "MUX-based Cirrus Logic CS8900 Ethernet Driver.");
   status2 = END_MIB_INIT (&pCS->end, M2_ifType_ethernet_csmacd,
                           &pCS->enetAddr[0], 6,
                           SIZEOF_ETHERHEADER+ETHERMTU, END_SPEED);
   if ((status1 == ERROR) || (status2 == ERROR))
   {
      LOGMSG("csEndLoad: CS_END_DEVICE %d,  END_OBJ_INIT or END_MIB_INIT failed\n", 
         pCS->unit,0,0,0,0,0 );
      return( NULL );
   }
      

   /* Reset the chip */
   if ( csResetChip(pCS) == ERROR )
   {
      LOGMSG("csEndLoad: CS_END_DEVICE %d, Can not reset chip\n", 
         pCS->unit,0,0,0,0,0 );
      return NULL;
   }

    
    /* set the flags to indicate readiness */ 
    END_OBJ_READY (&pCS->end, IFF_NOTRAILERS | IFF_BROADCAST | IFF_MULTICAST );

    /* Set promiscuous mode if user asked for. */
    if ( pCS->ConfigFlags & CFGFLG_PROMISC_MODE )
    {
       END_FLAGS_SET(&pCS->end, IFF_PROMISC);
    }

    LOGMSG("csEndLoad: CS_END_DEVICE %d, csEndLoad has finished successfully!\n", 
            pCS->unit,0,0,0,0,0 );

    return (&pCS->end);
}


/*******************************************************************************
*
* csParse - parse the init string
*
* Parse the input string.  Fill in values in the driver control structure.
*
* The initialization string format is:
*  "Unit:IOAdr:IntLevel:MemAddr:MediaType:ConfigFlags"
*
* .bS
* unit                Device unit number, a small integer, Decimal.
* IOAdr                IO address, Hexadecimal.
* intLevel        Interrupt level, Decimal. 
* memAddr        Memory Address, Hexadecimal.
* mediaType Media Type, Decimal.
* cofigFlag COnfiguration flags. See definition of flags in csEnd.h, Hexadecimal. 
*
* .bE
*
* RETURNS: NULL for invalid arguments or Pointer to CS_END_DEVICE for the device.
*/

CS_END_DEVICE *csParse (
    char *initString                /* information string */
    )
{
char*        tok;
char*        pHolder = NULL;
int          unit;
unsigned long  tmp_long;
unsigned short tmp_short;
CS_END_DEVICE *pCS;

   /* Parse the initString */
   /* Unit number. */
   tok = strtok_r (initString, ":", &pHolder);
   if (tok == NULL)
      return NULL;

   unit = atoi(tok);
   if ( unit >= CS_MAX_NUM_UNITS )
   {
      LOGMSG("csEndLoad: Invalid unit number (%d)\n", unit,0,0,0,0,0 );
      return NULL;
   }
   pCS = &cs_end[unit];
   pCS->unit =unit;

   /* Save the passed-in parameters */

   tok = strtok_r (NULL, ":", &pHolder);
   if (tok == NULL)
   {
      return NULL;
   }
   tmp_long = strtoul (tok, NULL, 16);
   pCS->IOAddr= tmp_long;

   tok = strtok_r (NULL, ":", &pHolder);
   if (tok == NULL) return NULL;
   tmp_short = (USHORT )strtoul(tok, NULL, 16);
   pCS->IntLevel= tmp_short;

#if CPU_FAMILY != ARM
    pCS->IntVector = sysVectorIRQ0 + pCS->IntLevel;
#endif

   tok = strtok_r (NULL, ":", &pHolder);
   if (tok == NULL) return NULL;
   tmp_long = strtoul (tok, NULL, 16);
   pCS->pPacketPage= (unsigned short *)tmp_long;

   tok = strtok_r (NULL, ":", &pHolder);
   if (tok == NULL) return NULL;
   tmp_short = (USHORT )atoi(tok);
   pCS->MediaType = tmp_short;

   tok = strtok_r (NULL, ":", &pHolder);
   if (tok == NULL) return NULL;
   tmp_long = (USHORT)strtoul (tok, NULL, 16);
   pCS->ConfigFlags = tmp_long;

   LOGMSG("csParser(): IOAddr=0X%X, IntLevel=%d, IntVect=0X%X, 
           MemBase=0X%X, MediaType=%d, ConfigFlag=0X%X\n", 
           pCS->IOAddr,pCS->IntLevel,pCS->IntVector,(unsigned int)pCS->pPacketPage,
           pCS->MediaType, pCS->ConfigFlags );
 
   return pCS;
}

/*******************************************************************************
*
* csInitRxBuff -
*
* This routine initializes the network interface driver's collection of
* receive buffers.  The receive buffers are allocated from system memory
* and linked together in a linked list of free receive buffers.
*
* RETURNS: OK or ERROR.
*/

LOCAL STATUS csInitRxBuff( CS_END_DEVICE *pCS )
{
  M_CL_CONFIG endMclBlkConfig=         /* network mbuf configuration table */
       
 /* no. mBlks  no. clBlks memArea memSize
    ---------  ---------- ------- ------- */
  { 0,           0,         NULL,         0 };
    


  CL_DESC endClDescTbl []= {        /* network cluster pool configuration table */    
/*  clusterSize                    num                    memArea        memSize
    ------------  ----------------        -------        ------- */
    {END_BUFSIZE, CS_NUM_RX_BUFFERS, NULL,            0}
  }; 

  int endClDescTblNumEnt;


   /* Allocate Memory for Clusters used by RX buffers */
    
   if ((pCS->end.pNetPool = malloc(sizeof(NET_POOL))) == NULL)
        return (ERROR);

    endMclBlkConfig.mBlkNum = 2*CS_NUM_RX_BUFFERS;
    endMclBlkConfig.clBlkNum = CS_NUM_RX_BUFFERS;
   
  
    /* Calculate the total memory for all the M-Blks and CL-Blks. */

    endMclBlkConfig.memSize = (endMclBlkConfig.mBlkNum * (MSIZE + sizeof (long))) +
                          (endMclBlkConfig.clBlkNum * (CL_BLK_SZ + sizeof(long)));

    if ((endMclBlkConfig.memArea = (char *) memalign (sizeof(long),
                             endMclBlkConfig.memSize)) == NULL)
    {
       LOGMSG("csInitRxBuff: Unit=%d Memory unavailable. memalign() Failed!\n", 
                        pCS->unit, 0, 0, 0, 0, 0);
       return (ERROR);
    }
    
    /* Calculate the memory size of all the clusters. */

    endClDescTbl[0].memSize = (endClDescTbl[0].clNum * (END_BUFSIZE + 8))
                              + sizeof(int);

    /* Allocate the memory for the clusters from cache safe memory. */

   endClDescTbl[0].memArea =(char *) cacheDmaMalloc(endClDescTbl[0].memSize);
    

   if ((int)endClDescTbl[0].memArea == NULL)
   {
      LOGMSG("csInitRxBuff: Unit=%d System memory unavailable\n", 
              pCS->unit, 0, 0, 0, 0, 0);
      return (ERROR);
   }
    

   endClDescTblNumEnt = (NELEMENTS(endClDescTbl));
 
   /* Initialize the memory pool. */

   if (netPoolInit(pCS->end.pNetPool, &endMclBlkConfig,
                    &endClDescTbl[0], endClDescTblNumEnt, NULL) == ERROR)
   {
        LOGMSG("csInitRxBuff: Unit=%d Could not init buffering\n",
                pCS->unit, 0, 0, 0, 0, 0);
        return (ERROR);
   }

   /* Store the cluster pool id as others need it later. */
   pCS->pClPoolId = netClPoolIdGet(pCS->end.pNetPool, (int)END_BUFSIZE, (BOOL)FALSE);
   if (pCS->pClPoolId == NULL)
   {
        LOGMSG("csInitRxBuff: Unit=%d Could not memory cluster ID\n",
                pCS->unit, 0, 0, 0, 0, 0);
        return (ERROR);
   }
   
   return OK;
}


/*******************************************************************************
*
* csVerifyChip -
*
* This routine verifies that the Ethernet chip is present and correct.
*
*/

LOCAL STATUS csVerifyChip( CS_END_DEVICE *pCS )
{
USHORT wrVal, rdVal;
USHORT errorCount = 0;
USHORT x=0xFFFF;

   /* Verify that we can read from the chip */
   x = csReadPacketPage( pCS, PKTPG_EISA_NUM );
   if ( x == 0xFFFF )
   {
      LOGMSG("csVerifyChip: CS_END_DEVICE %d, can't read from chip (I/O address correct?)\n",
              pCS->unit, 0,0,0,0,0 );
      return ERROR;
   }

   /* Verify that the chip is a Crystal Semiconductor chip */
   if ( x != EISA_NUM_CRYSTAL )
   {
      LOGMSG("csVerifyChip: CS_END_DEVICE %d, Chip is not a Crystal Semiconductor chip\n",
              pCS->unit, 0,0,0,0,0 );
      return ERROR;
   }

   /* Verify that the chip is a CS8900 */
   x = csReadPacketPage(pCS,PKTPG_PRODUCT_ID);
   x &= PROD_ID_MASK;
   if ( x != PROD_ID_CS8900)
   {
      LOGMSG("csVerifyChip: CS_END_DEVICE %d, Chip is not a CS8900p\n",
              pCS->unit, 0,0,0,0,0 );
      return ERROR;
   }

    /* walk a one in the memory of the enet controller */
    for( wrVal = 0x0001; wrVal != 0; wrVal <<= 1 )
    {
 
      for( x=0x150; x<= 0x15d; x+=2 )
      {
        /* write out value - don't swap bytes */
        csWritePacketPage( pCS, x, wrVal );
   
        /* read back value - don't swap bytes */
        rdVal = csReadPacketPage( pCS, x );
  
        if( wrVal != rdVal )
        {
          if( errorCount <=10 )
          {
            LOGMSG("csVerifyChip:  ERROR reg %04X, wrVal %04X, rdVal %04X\n",
                    x, (unsigned int) BYTE_SWAP(wrVal),
                    (unsigned int) BYTE_SWAP(rdVal),0,0,0 );
          }
          errorCount++;
        }
      }
    } /* end walking one test */

    /* write incrementing value test */
    for( x=0x150, wrVal=0x0101; x<= 0x15d; x+=2, wrVal+=0x0101 )
    {
      /* write out value - don't worry about swapping bytes */
      csWritePacketPage( pCS, x, wrVal );
    } 

    /* read incrementing value test */
    for( x=0x150, wrVal=0x0101; x<= 0x15d; x+=2, wrVal+=0x0101 )
    {
       /* read back value - don't worry about swapping bytes */
       rdVal = csReadPacketPage( pCS, x );
 
       if( wrVal != rdVal )
       {
          LOGMSG("\ncsVerifyChip:  ERROR reg %04X, wrVal %04X, rdVal %04X\n",
                  x, (unsigned int) BYTE_SWAP(wrVal), 
                  (unsigned int) BYTE_SWAP(rdVal),0,0,0 );
          errorCount++;
       }
    } /* end walking one test */

    if( errorCount != 0 )
    {
        LOGMSG("csVerifyChip: ERROR SRAM test failed, errorCount %d\n", 
                errorCount,0,0,0,0,0 );
        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: 
Mark out the following code.*/ 
   /* Setup the interrupt handler and the IDT table entry */
   if ( intConnect(INUM_TO_IVEC(pCS->IntVector),csIntr, (int)pCS) == ERROR )
   {
      LOGMSG("csStart: CS_END_DEVICE %d, Can not connect intertupt\n", 
         pCS->unit,0,0,0,0,0 );
      return NULL;
   }



   LOGMSG("csStart: unit=%d, Initializing interface\n",
           pCS->unit, 0,0,0,0,0 );

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

   /* Enable CS8900 interrupts at the system level */
   if ( sysEnetIntEnable(pCS) == ERROR )
   {
      LOGMSG("csStart: CS_END_DEVICE %d, sysEnetIntEnable failed\n", 
              pCS->unit,0,0,0,0,0 );
      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)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产1区2区3区精品美女| 欧美日韩视频专区在线播放| 久久国产欧美日韩精品| 亚洲成人自拍一区| 亚洲成人7777| 日韩国产在线一| 日韩电影在线看| 免费一区二区视频| 麻豆精品国产91久久久久久| 久久国产剧场电影| 久久99精品国产.久久久久| 欧美aaa在线| 开心九九激情九九欧美日韩精美视频电影| 视频一区国产视频| 美女视频黄免费的久久| 精品一区二区三区久久久| 国产在线精品视频| 成人h动漫精品一区二| 99久久久久免费精品国产| 色中色一区二区| 欧美日韩免费在线视频| 91精品免费在线观看| 精品剧情在线观看| 国产欧美日韩精品a在线观看| 最好看的中文字幕久久| 亚洲一区二区av电影| 午夜国产精品一区| 国产在线一区二区综合免费视频| 国产v综合v亚洲欧| 欧美中文字幕久久| 欧美一区日本一区韩国一区| 久久久久9999亚洲精品| 一区精品在线播放| 同产精品九九九| 国内成人精品2018免费看| 成人av网站大全| 69堂精品视频| 久久精品欧美一区二区三区麻豆| 18欧美乱大交hd1984| 三级久久三级久久久| 国产精品一二三区| 在线免费观看成人短视频| 丝袜诱惑制服诱惑色一区在线观看| 免费观看91视频大全| k8久久久一区二区三区 | 日韩精品一区二区三区蜜臀| 国产亚洲精品中文字幕| 洋洋成人永久网站入口| 精品午夜久久福利影院| 色偷偷久久人人79超碰人人澡| 日韩精品一区二区在线| 亚洲激情图片qvod| 国产揄拍国内精品对白| 欧美在线一区二区| 国产丝袜欧美中文另类| 日韩电影在线观看电影| 成人免费三级在线| 日韩一区二区免费高清| 亚洲精品免费在线观看| 久久狠狠亚洲综合| 欧美午夜不卡视频| 国产精品色一区二区三区| 美女国产一区二区三区| 在线免费亚洲电影| 国产精品高清亚洲| 精品亚洲porn| 欧美精品色综合| 亚洲免费在线观看视频| 国产麻豆成人精品| 日韩西西人体444www| 亚洲自拍偷拍网站| eeuss鲁片一区二区三区在线看| 日韩视频一区二区三区| 亚洲国产综合人成综合网站| 99综合影院在线| 久久麻豆一区二区| 蜜臀91精品一区二区三区| 在线一区二区观看| 中文字幕亚洲区| 国产超碰在线一区| 精品伦理精品一区| 欧美一二三四区在线| 亚洲精品菠萝久久久久久久| 成人午夜免费视频| 久久丝袜美腿综合| 免费欧美高清视频| 88在线观看91蜜桃国自产| 一区二区三区中文免费| 99久久99久久免费精品蜜臀| 国产日韩成人精品| 国产精品亚洲一区二区三区在线| www.日本不卡| 亚洲高清视频的网址| 激情国产一区二区| 99久久久国产精品| 国产精品另类一区| 成人激情图片网| 国产女人aaa级久久久级 | 日本成人在线网站| 欧美日韩三级在线| 日韩激情一区二区| 欧美一二三四在线| 激情综合网最新| 精品99999| 极品销魂美女一区二区三区| 欧美电影免费观看高清完整版在线观看| 日韩精品欧美成人高清一区二区| 在线观看成人小视频| 亚洲成av人片在线| 日韩一区二区在线观看视频播放| 男女男精品视频| 日韩你懂的电影在线观看| 麻豆国产精品官网| 久久久噜噜噜久噜久久综合| 国产成人综合在线播放| 中文天堂在线一区| 色综合视频在线观看| 亚洲va国产va欧美va观看| 欧美精品一二三区| 韩国女主播成人在线观看| 欧美国产1区2区| 91麻豆免费视频| 亚洲国产精品一区二区www在线 | 亚洲中国最大av网站| 欧美午夜精品免费| 久久精品72免费观看| 国产精品三级电影| 欧日韩精品视频| 日韩电影在线看| 日本一区二区免费在线| 91老师国产黑色丝袜在线| 午夜国产精品一区| 久久精品视频在线看| 一本色道亚洲精品aⅴ| 日韩精品一二三| 国产日韩欧美在线一区| 91同城在线观看| 日韩精品一二三| 国产精品免费久久久久| 欧美无乱码久久久免费午夜一区| 麻豆一区二区三区| 亚洲三级电影网站| 日韩视频永久免费| 99久久er热在这里只有精品15 | 97超碰欧美中文字幕| 欧美亚洲一区三区| 激情六月婷婷久久| 亚洲美女免费视频| 日韩免费福利电影在线观看| 成人高清在线视频| 日韩精品一二区| 中文字幕一区在线观看| 91精品国产欧美一区二区成人| 国产成人在线观看免费网站| 亚洲午夜精品一区二区三区他趣| 精品欧美乱码久久久久久1区2区| 91美女精品福利| 国产麻豆精品在线| 亚洲成人资源网| 国产精品色眯眯| 日韩精品一区二区三区视频播放| 一本一道综合狠狠老| 国产精品一区免费在线观看| 亚洲五码中文字幕| 欧美国产激情二区三区 | 一区二区日韩av| 久久精品在这里| 欧美精品乱人伦久久久久久| av爱爱亚洲一区| 国产精品一区二区三区99| 婷婷开心久久网| 亚洲视频免费在线观看| 久久久精品国产免大香伊| 91精品国产麻豆| 在线观看视频一区二区| av亚洲产国偷v产偷v自拍| 另类调教123区| 亚洲综合色网站| 中文字幕中文乱码欧美一区二区| 欧美成人一级视频| 欧美精品亚洲二区| 91福利视频网站| 91理论电影在线观看| www.在线欧美| 国产河南妇女毛片精品久久久| 欧美a级一区二区| 天天综合色天天| 亚洲最色的网站| 亚洲人快播电影网| 成人av第一页| 国产成+人+日韩+欧美+亚洲| 国产一区二区在线免费观看| 青青草国产成人99久久| 亚洲123区在线观看| 一二三四社区欧美黄| 亚洲色图视频免费播放| 中文字幕av一区 二区| 国产色综合久久| 久久精品亚洲乱码伦伦中文| 久久久国产午夜精品|