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

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

?? dm9000.c

?? magic2200開發試驗箱上面得dm9000網卡芯片驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
    {        return -EBUSY;
    }    /* Set the device copy of the Ethernet address */

    memcpy(dev->dev_addr, mac_addr->sa_data, dev->addr_len);
        for(i = 0; i < 6; i++)
    {
        MyMacID[i] = mac_addr->sa_data[i];
    }
    device_init(dev);

    return 0;    
}

                           /*********************************************************************************************************
** Function name: net_tx
** Descriptions:  send data to other machine
** Input: skb:    save data for send
**        dev:    information of device
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int net_tx(struct sk_buff *skb, struct net_device *dev){    unsigned long flag;    int len;
    u16 *data;
    board_info_t *db = dev->priv;

    netif_stop_queue(dev);

    len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
    data = (u16 *)skb->data;    len = (len + 1) & (~1);
    local_irq_save(flag);
    iow(db, 0xff, 0x80);

    outb(0xf8, db->ioaddr);

    outsw(db->io_data, data, len >> 1);

    iow(db, 0xfc, len & 0xff);
    iow(db, 0xfd, (len >> 8) & 0xff);
 
    iow(db, 0x2, 0x1);      /* Cleared after TX complete */
        
    /* Re-enable interrupt*/ 
    iow(db, 0xff, 0x83);
                dev->trans_start = jiffies;
    local_irq_restore(flag);
    dev_kfree_skb(skb);

    return 0; /* Our simple device can not fail */}/*********************************************************************************************************
** Function name: net_open
** Descriptions:  open device
** Input: dev:    information of device
**       
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int  net_open(struct net_device *dev){    unsigned long flag;    u32 temp;
    if (usage == 0)
    {
        local_irq_save(flag);        temp = inl(PINSEL0);        PinSel0Save = temp & (0x0f << (8 * 2));        temp |= (3 << (9 * 2));        temp &= ~(3 << (8 * 2));        outl(temp, PINSEL0);
        temp = inl(IO0DIR);        temp |= 1 << 8;        outl(temp, IO0DIR);        outl(1 << 8, IOCLR);        device_init(dev);        temp = inl(VPBDIV);        temp = inl(VPBDIV);        outl(0, VPBDIV);        outl(inl(EXTMODE) & (~(1 << 3)), EXTMODE);        outl(inl(EXTPOLAR) | (1 << 3), EXTPOLAR);        outl(temp, VPBDIV);        local_irq_restore(flag);
        request_irq(dev->irq, net_irq_handle, SA_INTERRUPT | SA_SAMPLE_RANDOM, "eth0", dev);
    }    usage++;    MOD_INC_USE_COUNT;    netif_start_queue(dev);
    return 0;          /* success */} /*********************************************************************************************************
** Function name: net_release
** Descriptions:  release device
** Input: dev:    information of device
**       
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int  net_release(struct net_device *dev) {    unsigned long flag;    u32 temp;    netif_stop_queue(dev);    MOD_DEC_USE_COUNT;
    MOD_DEC_USE_COUNT;    usage--;
    if (usage == 0)
    {
        local_irq_save(flag);        temp = inl(PINSEL0);        temp &= ~(3 << (9 * 2));        temp |= PinSel0Save;
        outl(temp, PINSEL0);        local_irq_restore(flag);
        free_irq(dev->irq, dev);
    }    return(0); } /*********************************************************************************************************
** Function name: net_rx
** Descriptions:  transact receving data
** Input: dev:    information of device
**       
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static void net_rx(struct net_device *dev, unsigned int length){    struct sk_buff *skb;    u8 *dec;
    board_info_t *db = dev->priv;
    /*     * The packet has been retrieved from the transmission     * medium. Build an skb around it, so upper layers can handle it     */    skb = dev_alloc_skb(length + 2);    if (!skb)    {        return;    }    skb_reserve(skb, 2);                        /* align IP on 16B boundary */  
    skb_put(skb, length);    dec = skb->data;

    insw(db->io_data, dec, length >> 1);
    if ((length & 0x01) != 0)
    {
        dec[length - 1] = inb(db->io_data);
    }
    /* Write metadata, and then pass to the receive level */    skb->dev = dev;    skb->protocol = eth_type_trans(skb, dev);    skb->ip_summed = CHECKSUM_UNNECESSARY;

    netif_rx(skb);    dev->last_rx = jiffies;    return;}/*********************************************************************************************************
** Function name: device_rx
** Descriptions:  device receving data
** Input: dev:    information of device
**       
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int device_rx(struct net_device *dev){    unsigned int i, RxStatus, RxLen, GoodPacket, tmplen;
    unsigned int rxbyte;
    board_info_t *db = dev->priv;
    while (1)    {        ior(db, 0xf0);          /* Dummy read *///set the address to 0xf0
        rxbyte = inb(db->io_data);  /* Got most updated data */

        /* Status check: this byte must be 0 or 1 */
        if (rxbyte > DM9000_PKT_RDY)
        {
            return -1;
        }


        if (rxbyte != DM9000_PKT_RDY)
        {
            break;
        }

        /* A packet ready now  & Get status/length */
        GoodPacket = TRUE;
        outb(0xf2, db->ioaddr);//set the address to 0xf2
            
        RxStatus = inw(db->io_data);
        RxLen    = inw(db->io_data);

        /* Packet Status check */
        if (RxLen < 60)
        { //Runt Packet
             GoodPacket = FALSE; 
        }
            
        if (RxLen > DM9000_PKT_MAX)
        {  //long packet
           return -1;
        }
            
        if (RxStatus & 0xbf00)
        {//status err
            GoodPacket = FALSE;
        }

        /* Move data from DM9000 */
            
        if ( GoodPacket  )
        {
            net_rx(dev, RxLen);
        }
        else
        {
            /* Without buffer or error packet */
            tmplen = (RxLen + 1) / 2;
            for (i = 0; i < tmplen; i++)
            {
                inw(db->io_data);
            }
        }
    }    return 0;}
/*********************************************************************************************************
** Function name: net_tasklet
** Descriptions:  The tasklet for interrupt handler
** Input:
** Output none
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static void net_tasklet(unsigned long data)
{
    struct net_device *dev;

    dev = (struct net_device *)data;

    device_init(dev);
}
/*********************************************************************************************************
** Function name: net_irq_handle
** Descriptions:  The top-half interrupt handler
** Input:
** Output none
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static void net_irq_handle(int irq, void *dev_id, struct pt_regs *regs){    unsigned int int_status;
    struct net_device *dev;    board_info_t *db;
        dev = (struct net_device *)dev_id;
    db = dev->priv;
    int_status = ior(db, 0xfe);         /* Got ISR */
    iow(db, 0xfe, int_status);          /* Clear ISR status */ 
    outl(1 << (dev->irq - 14), EXTINT);

    if (int_status & DM9000_TX_INTR)     //表示發送成功,判斷發送狀態寄存器TSR,決定是否出錯
    {
        netif_start_queue(dev);
    }

    if (int_status & DM9000_RX_INTR)     /* 接收成功       */
    {
        if (device_rx(dev) == -1)
        {
            DM9000Dev = dev;
            tasklet_schedule (&ZLG_net_tasklet);
        }
    }
}
/*********************************************************************************************************
** Function name: net_init_module
** Descriptions:  init driver
** Input: none
**       
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        int  net_init_module(void){    int  result;    result = register_netdev(&net_net);     if (result < 0)    {        printk(KERN_ERR "eth0: error %i registering device \"%s\"\n",               result, net_net.name);        return(result);     }     printk(KERN_ERR "eth0: init OK\n");    return(0); }/*********************************************************************************************************
** Function name: net_cleanup
** Descriptions:  exit driver
** Input: none
**       
** Output: 0:     OK
**         other: not OK
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void net_cleanup(void){    unregister_netdev(&net_net);}/***********************************************************************************************************                            End Of File********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美国产一区| 成人中文字幕在线| 国产精品免费网站在线观看| 欧美日韩日日骚| jlzzjlzz欧美大全| 免费看日韩精品| 樱花草国产18久久久久| 久久久久久久综合色一本| 欧美日韩三级一区二区| 成人av免费在线播放| 日韩激情一二三区| 亚洲免费成人av| 精品动漫一区二区三区在线观看| 91国偷自产一区二区三区成为亚洲经典| 天天操天天干天天综合网| 国产精品美女久久久久久2018| 日韩精品中文字幕在线一区| 欧美日韩精品综合在线| 色先锋久久av资源部| 夫妻av一区二区| 精品中文字幕一区二区| 日韩激情一区二区| 亚洲成人av在线电影| 亚洲精品视频在线观看网站| 国产精品理伦片| 欧美激情一区在线观看| 久久精品一二三| 久久色视频免费观看| 日韩欧美激情在线| 日韩欧美在线1卡| 日韩欧美在线影院| 日韩精品一区二区三区视频播放| 欧美一区二区三区免费大片 | 欧美日韩美少妇| 一本大道综合伊人精品热热| 91亚洲精品乱码久久久久久蜜桃| 成人一区二区视频| 白白色 亚洲乱淫| 不卡av在线免费观看| 99久久精品国产精品久久| 成人午夜av电影| 91欧美一区二区| 欧美自拍丝袜亚洲| 欧美丰满嫩嫩电影| 日韩欧美在线影院| 国产精品传媒在线| 亚洲人成精品久久久久| 亚洲综合在线电影| 亚洲18女电影在线观看| 日韩国产欧美一区二区三区| 男人操女人的视频在线观看欧美| 另类综合日韩欧美亚洲| 国产成人综合在线| 99久久精品国产一区二区三区| 99久久精品国产观看| 日本丶国产丶欧美色综合| 欧美亚洲国产一区二区三区| 欧美精品色一区二区三区| 678五月天丁香亚洲综合网| 日韩亚洲欧美成人一区| 国产午夜精品一区二区三区视频| 国产精品久久久久一区二区三区 | 本田岬高潮一区二区三区| 91亚洲大成网污www| 在线观看亚洲一区| 欧美一区二区三区的| 国产视频一区在线观看| 亚洲精品日日夜夜| 免费在线看成人av| 成人小视频在线| 欧美揉bbbbb揉bbbbb| 日韩一区二区中文字幕| 中文字幕 久热精品 视频在线| 亚洲精品一卡二卡| 精品一区二区免费看| 9i在线看片成人免费| 欧美日韩成人高清| 中文字幕乱码日本亚洲一区二区| 一级日本不卡的影视| 免费在线看成人av| 99在线视频精品| 日韩欧美国产一区二区三区| 国产精品电影一区二区| 美女视频黄 久久| 成人毛片视频在线观看| 在线成人午夜影院| 国产精品久久久久久久久搜平片| 天堂精品中文字幕在线| 丁香婷婷综合激情五月色| 欧美精选一区二区| 国产精品国产自产拍高清av王其| 日本美女一区二区三区视频| jizz一区二区| 精品福利二区三区| 午夜欧美在线一二页| 99久久精品国产导航| 精品国产成人系列| 午夜精品视频在线观看| 丁香六月久久综合狠狠色| 91麻豆精品国产91久久久更新时间 | 在线不卡a资源高清| 国产精品久久久久久一区二区三区| 日本aⅴ亚洲精品中文乱码| 一本大道av伊人久久综合| 久久影院午夜论| 日韩av一区二区三区四区| 一本久久精品一区二区| 国产日韩欧美精品综合| 男女性色大片免费观看一区二区| 91免费观看在线| 亚洲国产精品二十页| 韩国中文字幕2020精品| 欧美群妇大交群中文字幕| 亚洲欧美视频一区| www.亚洲色图.com| 精品国产制服丝袜高跟| 青青草国产精品97视觉盛宴| 色又黄又爽网站www久久| 欧美激情一区在线| 国产麻豆欧美日韩一区| 亚洲精品在线免费观看视频| 日一区二区三区| 911精品国产一区二区在线| 一区二区三区国产精品| 99精品国产99久久久久久白柏| 国产色产综合产在线视频| 国产在线看一区| 精品国产乱子伦一区| 精一区二区三区| 26uuu国产日韩综合| 国产一区二区在线观看免费| 精品播放一区二区| 国精产品一区一区三区mba桃花| 日韩三级在线观看| 黄一区二区三区| 久久久亚洲精品一区二区三区| 精品午夜一区二区三区在线观看| 精品乱码亚洲一区二区不卡| 免费欧美在线视频| 精品国产电影一区二区| 国产一区二区毛片| 国产三级欧美三级| 北条麻妃一区二区三区| 亚洲欧美aⅴ...| 欧洲另类一二三四区| 肉色丝袜一区二区| 欧美成人伊人久久综合网| 韩国午夜理伦三级不卡影院| 久久精品亚洲乱码伦伦中文| 国产91清纯白嫩初高中在线观看| 国产日韩av一区二区| 暴力调教一区二区三区| 一区二区三区中文字幕| 在线电影院国产精品| 久久国产精品99久久久久久老狼| 亚洲精品一区二区三区影院 | 99国产精品国产精品久久| 国产精品高潮呻吟久久| 色综合激情五月| 日韩精品成人一区二区在线| 精品国产第一区二区三区观看体验| 国内精品久久久久影院一蜜桃| 国产精品少妇自拍| 欧美亚一区二区| 激情av综合网| 亚洲欧美另类小说视频| 欧美一级高清大全免费观看| 风间由美一区二区av101| 一区二区三区丝袜| 日韩免费观看2025年上映的电影| 国产成人综合网| 亚洲永久精品大片| 精品国产乱码久久久久久图片| 成人一级黄色片| 天天影视色香欲综合网老头| 国产婷婷一区二区| 欧美在线免费观看视频| 激情综合色综合久久| 亚洲特级片在线| 精品国产网站在线观看| 99精品国产99久久久久久白柏| 亚洲国产视频网站| 国产精品女人毛片| 久久久国产精华| 欧美性大战久久久久久久| 久久aⅴ国产欧美74aaa| 亚洲资源中文字幕| 久久久电影一区二区三区| 欧美日韩专区在线| 国产成人精品1024| 日产精品久久久久久久性色| 国产欧美日韩亚州综合| 91精品国产乱码久久蜜臀| 91在线视频观看| 国产一区二区免费看| 日本午夜一本久久久综合| 日韩伦理av电影| 久久免费美女视频| 欧美乱妇一区二区三区不卡视频| caoporn国产精品|