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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dm9000end.c

?? 操作系統(tǒng)中的一找你個(gè)的相關(guān)的淡淡的碼源代碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
            *(int *)data = END_FLAGS_GET(&pDrvCtrl->end);
            break;
        case EIOCMULTIADD:
            status = dm9000MCastAdd ((void*)pDrvCtrl, (char *) data);
            break;
        case EIOCMULTIDEL:
            status = dm9000MCastDel((void*)pDrvCtrl, (char *) data);
            break;
        case EIOCMULTIGET:
            status = dm9000MCastGet ((void*)pDrvCtrl, (MULTI_TABLE *) data);
            break;
        case EIOCPOLLSTART:   /* Begin polled operation */
            dm9000PollStart ((void*)pDrvCtrl);
            break;
        case EIOCPOLLSTOP:  /* End polled operation */
            dm9000PollStop ((void*)pDrvCtrl);
            break;
        case EIOCGMIB2:     /* return MIB information */
            if (data == NULL)
                return (EINVAL);
            bcopy((char *)&pDrvCtrl->end.mib2Tbl,(char *)data,
                sizeof(pDrvCtrl->end.mib2Tbl));
            break;
        case EIOCGFBUF:     /* return minimum First Buffer for chaining */
            if (data == NULL)
                return (EINVAL);
            *(int *)data = DM9000_MIN_FBUF;					
            break;
        case EIOCGHDRLEN:
		        if(data == NULL) return EINVAL;
		        *(int *)data = EH_SIZE;
		        break;
		
        default:
            status = EINVAL;
    }
    return (status);
}


/******************************************************************************
*
* dm9000Config - reconfigure the interface under us.
*
* Reconfigure the interface setting promiscuous mode, and changing the
* multicast interface list.
*
* RETURNS: N/A.
*/

static void dm9000Config( END_DEVICE *pDrvCtrl ) /* device to be re-configured */
{
    /* Set promiscuous mode if it's asked for. */
    if (END_FLAGS_GET(&pDrvCtrl->end) & IFF_PROMISC)
    {
#ifdef DM_DEBUG_PRINT
         logMsg ("dm9000Config() Setting promiscuous mode on!\n", 0, 0, 0, 0, 0, 0);
#endif
    }
    else
    {
#ifdef DM_DEBUG_PRINT
        logMsg ("dm9000Config() Setting promiscuous mode off!\n", 0, 0, 0, 0, 0, 0);
#endif
     
     /* Set up address filter for multicasting. */
        dm9000AddrFilterSet (pDrvCtrl);
    }

   /*initialise the hardware according to flags */
   dmfe_config_dm9000( pDrvCtrl, 2 );
    
   return;
}

/******************************************************************************
*
* dm9000AddrFilterSet - set the address filter for multicast addresses
*
* This routine goes through all of the multicast addresses on the list
* of addresses (added with the endAddrAdd() routine) and sets the
* device's filter correctly.
*
* RETURNS: N/A.
*/

static void dm9000AddrFilterSet( END_DEVICE *pDrvCtrl )
{
    ETHER_MULTI* pCurr;
    
    unsigned long crc; 
    unsigned long hash_table[4];
    
    /*Get the first Mcast address from Mcast list */
    pCurr = END_MULTI_LST_FIRST (&pDrvCtrl->end);

    while (pCurr != NULL)
    {
        pCurr = END_MULTI_LST_NEXT(pCurr);     
    }

}

/*******************************************************************************
*
* dm9000PollRcv - routine to receive a packet in polled mode.
*
* This routine is called by a user to try and get a packet from the
* device.
*
* RETURNS: OK upon success.  EAGAIN is returned when no packet is available.
*/

static STATUS dm9000PollRcv( END_DEVICE *pV,  /* device to be polled */
                             M_BLK_ID   pMblk )     /* ptr to buffer */
{
    u_short stat;
    char* pPacket;
    int len = 64;

     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV; 
     
#ifdef DM_DEBUG_PRINT
    logMsg("dm9000PollRcv()\n", 0, 0, 0, 0, 0, 0);
#endif

    stat = dm9000StatusRead (pDrvCtrl);
    /* TODO - If no packet is available return immediately */

    if( !(stat&DM9000_RXRDY) )
    {
        logMsg("dm9000PollRcv: no data.\n", 0, 0, 0, 0, 0, 0);
        return (EAGAIN);
    }

    /* Upper layer must provide a valid buffer. */
    if ((pMblk->mBlkHdr.mLen < len) || (!(pMblk->mBlkHdr.mFlags & M_EXT)))
    {
        logMsg("dm9000PollRcv: PRX bad mblk.\n", 0, 0, 0, 0, 0, 0);
        return (EAGAIN);
    }


    END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_UCAST, +1);

    /* TODO - Process device packet into net buffer */
    while(dmfe_Get_NextPacket() != 0)
    {
     len = dmfe_Copy_RxFrame( pDrvCtrl, pMblk->mBlkHdr.mData+2, 0 );
    }

    if(len == ERROR)
    {
        logMsg("dm9000PollRcv: packet receive FAIL.\n", 0, 0, 0, 0, 0, 0);
        return (EAGAIN);
    }

    pMblk->mBlkHdr.mData += 2;
    pMblk->mBlkHdr.mFlags |= M_PKTHDR;  /* set the packet header */
    pMblk->mBlkHdr.mLen = len;          /* set the data len */
    pMblk->mBlkPktHdr.len = len;        /* set the total len */


    return (OK);
}

/*******************************************************************************
*
* dm9000PollSend - routine to send a packet in polled mode.
*
* This routine is called by a user to try and send a packet on the
* device.
*
* RETURNS: OK upon success.  EAGAIN if device is busy.
*/

static STATUS dm9000PollSend( END_DEVICE *pV,         /* device to be polled */
                              M_BLK_ID   pMblk )      /* packet to send */
{    
	  static UCHAR txBuf[DM9000_FRAME_BUFSIZE];
    int         len,lastone;
    u_short     stat;

     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV; 
         
#ifdef DM_DEBUG_PRINT
    logMsg("dm9000PollSend: dm9000PollSend()\n", 0, 0, 0, 0, 0, 0);
#endif

    /* TODO - test to see if tx is busy */
    stat = dm9000StatusRead (pDrvCtrl);             /* dummy code */
    if ((stat & (DM9000_TINT|DM9000_TFULL)) == 0)
        return ((STATUS) EAGAIN);

   /* Get data from Mblk to tx buffer. */
    len = netMblkToBufCopy (pMblk, (char*)txBuf, NULL);
    len = max (len, ETHERSMALL);
    
    /*transmit packet*/
    lastone = intLock();
    dmfe_Copy_TxFrame(pDrvCtrl, txBuf ,len);
    /*check a Completion Flag*/
    intUnlock( lastone );
    /* Bump the statistic counter. */
    END_ERR_ADD (&pDrvCtrl->end, MIB2_OUT_UCAST, +1);

    /* Free the data if it was accepted by device */

    netMblkClFree (pMblk);
#ifdef  DM_DEBUG_PRINT
    logMsg("dm9000PollSend: leaving dm9000PollSend.\n", 0, 0, 0, 0, 0, 0);
#endif
    return (OK);
}

/*****************************************************************************
*
* dm9000MCastAdd - add a multicast address for the device
*
* This routine adds a multicast address to whatever the driver
* is already listening for.  It then resets the address filter.
*
* RETURNS: OK or ERROR.
*/

static STATUS dm9000MCastAdd( END_DEVICE *pV,      /* device pointer */
                              char *pAddress )           /* new address to add */
{
     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV;  

    if ((etherMultiAdd (&pDrvCtrl->end.multiList,pAddress)) == ENETRESET)
    {
      dm9000Config(pDrvCtrl);
    }
 
    return (OK);
}

/*****************************************************************************
*
* dm9000MCastDel - delete a multicast address for the device
*
* This routine removes a multicast address from whatever the driver
* is listening for.  It then resets the address filter.
*
* RETURNS: OK or ERROR.
*/

static STATUS dm9000MCastDel( END_DEVICE *pV,  /* device pointer */
                              char *pAddress )       /* address to be deleted */
{
    
     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV;
     
    if ((etherMultiDel (&pDrvCtrl->end.multiList, (char *)pAddress)) == ENETRESET)
    {
     dm9000Config(pDrvCtrl);
    }

    return (OK);
}

/*****************************************************************************
*
* dm9000MCastGet - get the multicast address list for the device
*
* This routine gets the multicast list of whatever the driver
* is already listening for.
*
* RETURNS: OK or ERROR.
*/

static STATUS dm9000MCastGet( END_DEVICE *pV,  /* device pointer */
                              MULTI_TABLE *pTable )  /* address table to be filled in */
{
     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV;
     
    return (etherMultiGet (&pDrvCtrl->end.multiList, pTable));
}

/*******************************************************************************
*
* dm9000Stop - stop the device
*
* This function calls BSP functions to disconnect interrupts and stop
* the device from operating in interrupt mode.
*
* RETURNS: OK or ERROR.
*/

static STATUS dm9000Stop( END_DEVICE *pV )     /* device to be stopped */
{
     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV;
     
     intDisable(pDrvCtrl->ilevel);
 
    /* TODO - stop/disable the device. */
     dmfe_Stop_Chip( pDrvCtrl );
    
     return (OK);
}

/******************************************************************************
*
* dm9000Unload - 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.
*/

static STATUS dm9000Unload( END_DEVICE *pV )   /* device to be unloaded */
{
     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV;
     
#ifdef DM_DEBUG_PRINT
    logMsg("dm9000Unload()\n", 0, 0, 0, 0, 0, 0);
#endif

    END_OBJECT_UNLOAD (&pDrvCtrl->end);

    /* TODO - Free any shared DMA memory */
    return (OK);
}

/*******************************************************************************
*
* dm9000PollStart - start polled mode operations
*
* RETURNS: OK or ERROR.
*/

static STATUS dm9000PollStart( END_DEVICE *pV )    /* device to be polled */
{
     int         lastone;
    
     END_DEVICE *pDrvCtrl;
     pDrvCtrl=(END_DEVICE *)pV;
     
     lastone = intLock ();          
    
    /* TODO - turn off interrupts */
    (pDrvCtrl->flags) |= DM9000_POLLING;

    dm9000Reset( pDrvCtrl );
    dm9000Config( pDrvCtrl );       /* reconfigure device */

    intUnlock (lastone);            /* now dm9000Int won't get confused */

    logMsg("dm9000PollStart Poll Mode Start.\n", 0, 0, 0, 0, 0, 0);


    return (OK);
}

/*******************************************************************************
*
* dm9000PollStop - stop polled mode operations
*
* This function terminates polled mode operation.  The device returns to
* interrupt mode.
*
* The device interrupts are enabled, the current mode flag is switched
* to indicate interrupt mode and the device is then reconfigured for
* interrupt operation.
*
* RETURNS: OK or ERROR.
*/

static STATUS dm9000PollStop( END_DEVICE *pV ) /* device to be polled */
{
    int         lastone;
 
    END_DEVICE *pDrvCtrl;
    pDrvCtrl=(END_DEVICE *)pV;
     
    lastone = intLock ();  /* disable ints during register updates */

    (pDrvCtrl->flags) &= ~DM9000_POLLING;

    dm9000Reset( pDrvCtrl );
    dm9000Config( pDrvCtrl );       /* reconfigure device */

    intUnlock (lastone);

    logMsg ("dm9000PollStart Poll Mode Stop.\n", 0, 0, 0, 0, 0, 0);

    return (OK);
}

/*******************************************************************************
*
* dm9000Reset - reset device
*
* RETURNS: N/A.
*/

static void dm9000Reset( END_DEVICE *pDrvCtrl )
{
    dmfe_reset_dm9000( pDrvCtrl );
}

/*******************************************************************************
*
* dm9000StatusRead - get current device state/status
*
* RETURNS: status bits.
*/

static UINT dm9000StatusRead( END_DEVICE *pDrvCtrl )
{
    /* TODO - read and return status bits/register */
    UINT retv = 0;
    UCHAR status = 0;
    UCHAR rxbyte = 0;

    DM9000_IN_REG( 0xfe, status );
    DM9000_OUT_REG( 0xfe, status );
    DM9000_IN_REG( 0xf0, rxbyte ); /* Dummy read */
    DM9000_IN_REG( 0xf0, rxbyte ); /* Got most updated data */

    if( !((pDrvCtrl->flags) & DM9000_POLLING) )       
        retv |= DM9000_RXON;

    if( status & 0x01 )
        retv |= DM9000_RINT;

    if( status & 0x02 )
        retv |= DM9000_TINT;

    if( pDrvCtrl->tx_pkt_cnt > 2 )                  
        retv |= DM9000_TFULL;

    if( rxbyte == DM9000_PKT_RDY )
        retv |= DM9000_RXRDY;
    return (retv);
}

static void dmfe_reset_dm9000( END_DEVICE *dev )
{

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄网站免费久久| 寂寞少妇一区二区三区| 99国产精品99久久久久久| 国产亚洲一本大道中文在线| 欧美a级一区二区| 337p亚洲精品色噜噜噜| 香蕉成人伊视频在线观看| 在线观看日韩av先锋影音电影院| 亚洲丝袜自拍清纯另类| 97国产一区二区| 亚洲欧美视频在线观看视频| 波波电影院一区二区三区| 国产精品色在线观看| 不卡电影一区二区三区| 亚洲欧美另类小说视频| 色婷婷久久久亚洲一区二区三区| 亚洲女与黑人做爰| 欧洲国产伦久久久久久久| 亚洲午夜视频在线观看| 欧美日韩精品欧美日韩精品一| 日韩综合一区二区| 日韩欧美国产麻豆| 国产精品亚洲午夜一区二区三区 | 日本欧美肥老太交大片| 日韩欧美专区在线| 国产一区二三区| 国产情人综合久久777777| 成人av综合在线| 伊人婷婷欧美激情| 欧美高清性hdvideosex| 另类的小说在线视频另类成人小视频在线| 精品剧情v国产在线观看在线| 国产一区日韩二区欧美三区| 国产精品丝袜久久久久久app| 99精品久久99久久久久| 亚洲国产一区二区在线播放| 欧美一区二区三区不卡| 国产一区二区三区免费播放| 欧美国产禁国产网站cc| 在线精品视频一区二区| 免费成人在线网站| 国产日产精品一区| 欧美专区亚洲专区| 蜜臀av一区二区在线观看| 国产色产综合产在线视频| 91丨porny丨户外露出| 亚洲成av人片一区二区| 久久久综合网站| 99re在线视频这里只有精品| 五月天丁香久久| 国产性色一区二区| 在线亚洲高清视频| 黑人巨大精品欧美一区| 日韩一区在线看| 91精品国产欧美一区二区| 国产在线精品一区二区三区不卡| 国产精品久久久久三级| 欧美日韩高清一区二区不卡| 国产一区二区三区久久悠悠色av| 最新欧美精品一区二区三区| 欧美剧在线免费观看网站| 国产精品一区二区不卡| 一级女性全黄久久生活片免费| 日韩午夜在线播放| 91免费版pro下载短视频| 日韩国产高清在线| 中文字幕在线免费不卡| 制服视频三区第一页精品| 成人黄页在线观看| 日韩成人伦理电影在线观看| 国产精品国产三级国产普通话三级 | 亚洲大片精品永久免费| 久久精品视频在线免费观看| 欧美日韩一区不卡| 成人性生交大合| 蜜桃一区二区三区在线观看| 综合久久久久久| 日韩欧美国产麻豆| 欧美三级一区二区| 成人99免费视频| 麻豆91精品视频| 亚洲一区自拍偷拍| 亚洲国产成人自拍| 精品国产乱码久久久久久浪潮 | 欧美日韩国产123区| 成人sese在线| 国产在线国偷精品免费看| 亚洲一区二区三区小说| 欧美高清在线精品一区| 欧美一级久久久久久久大片| 日本高清无吗v一区| 国产二区国产一区在线观看| 日韩精品乱码av一区二区| 亚洲精品福利视频网站| 国产欧美日韩久久| 欧美不卡一二三| 欧美三级在线播放| 色综合久久久久| 顶级嫩模精品视频在线看| 麻豆国产欧美一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 日本一区二区在线不卡| 日韩免费看的电影| 制服丝袜在线91| 在线欧美日韩国产| 91色在线porny| 成人黄色电影在线| 国产精品自拍一区| 久久er精品视频| 美女视频黄久久| 婷婷成人激情在线网| 一区二区三区国产| 亚洲视频图片小说| 亚洲欧洲日韩在线| 国产精品水嫩水嫩| 国产日本欧洲亚洲| 国产欧美视频在线观看| 久久综合九色欧美综合狠狠| 日韩一区二区三区视频在线观看| 欧美日韩一区二区三区不卡| 在线观看视频一区| 色婷婷av一区| 色一情一乱一乱一91av| 99国产精品久久久久久久久久 | 26uuu久久综合| 精品成人a区在线观看| 欧美tickling挠脚心丨vk| 日韩一级在线观看| 日韩欧美中文字幕精品| 日韩精品一区二区三区视频播放| 91精品国产综合久久久久久久| 欧美日韩在线不卡| 欧美绝品在线观看成人午夜影视| 欧美少妇xxx| 欧美人妇做爰xxxⅹ性高电影| 欧美女孩性生活视频| 欧美精品在线视频| 欧美一区二区三区色| 日韩精品最新网址| 久久久久久久久久久黄色| 国产亚洲精品久| 国产精品久久精品日日| 自拍偷拍亚洲欧美日韩| 一区二区三区在线观看视频| 一区二区三区鲁丝不卡| 亚洲午夜精品在线| 三级影片在线观看欧美日韩一区二区| 免费成人深夜小野草| 国产在线精品国自产拍免费| 国产a视频精品免费观看| 成人黄动漫网站免费app| 99视频有精品| 欧美午夜一区二区| 欧美一区二区视频免费观看| 精品国产露脸精彩对白| 国产精品久久久久久久久晋中| 亚洲视频在线一区二区| 性做久久久久久免费观看 | 亚洲一区在线电影| 日本不卡1234视频| 国产一区91精品张津瑜| 成人av影院在线| 欧美影院精品一区| 日韩美女天天操| 国产精品欧美精品| 亚洲一区日韩精品中文字幕| 麻豆精品一区二区综合av| 国产成人在线视频网站| 一本色道a无线码一区v| 91精品国产欧美一区二区18| 国产视频一区二区三区在线观看| 亚洲免费三区一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 国产麻豆精品在线| 色一情一伦一子一伦一区| 日韩一卡二卡三卡| 亚洲欧美中日韩| 奇米色一区二区三区四区| 成人高清在线视频| 欧美精品乱人伦久久久久久| 久久精品亚洲乱码伦伦中文| 亚洲一区二区三区精品在线| 久久99深爱久久99精品| 一本大道久久a久久综合| 欧美一级二级三级乱码| 国产精品国产三级国产普通话99 | 石原莉奈在线亚洲二区| 福利一区二区在线| 欧美日韩精品欧美日韩精品一综合| 久久亚洲春色中文字幕久久久| 尤物在线观看一区| 精品写真视频在线观看| 色一情一伦一子一伦一区| 精品国产乱码久久久久久夜甘婷婷 | 国产日韩欧美高清在线| 午夜电影网一区| 成人久久18免费网站麻豆| 日韩亚洲欧美成人一区| 一区二区三区四区在线免费观看| 极品少妇xxxx精品少妇|