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

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

?? dm9000.c

?? magic2200開發試驗箱上面得dm9000網卡芯片驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                     graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:           rtl8019.c
** Last modified Date:  2005-05-12
** Last Version:        1.0
** Descriptions:        This is a Kernel module for uClinux 2.4.x .**                      This module let uClinux 2.4.x can use rtl8019. 
**------------------------------------------------------------------------------------------------------
** Created by:          Chenmingji
** Created date:        2005-05-12
** Version:             1.0
** Descriptions:        The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**

********************************************************************************************************/
#define IN_DM9000#include "config.h"#include "dm9000.h"/********************************************************************************************************
              function announce********************************************************************************************************/
static int net_init(struct net_device *dev);static int net_open(struct net_device *dev);static int net_release(struct net_device *dev); static int net_config(struct net_device *dev, struct ifmap *map);static int net_tx(struct sk_buff *skb, struct net_device *dev);static void net_irq_handle(int irq, void *dev_id, struct pt_regs *regs);
static int net_set_mac_address(struct net_device *dev, void *addr);int  net_init_module(void);void net_cleanup(void);static void net_tasklet(unsigned long);/********************************************************************************************************
              define announce********************************************************************************************************/
static struct net_device *DM9000Dev;
module_init(net_init_module);module_exit(net_cleanup);DECLARE_TASKLET(ZLG_net_tasklet, net_tasklet, (unsigned long)(&DM9000Dev));
MODULE_LICENSE("Proprietary");MODULE_DESCRIPTION("Guangzou ZLG-MCU Development Co.,LTD.\ngraduate school\nhttp://www.zlgmcu.com");MODULE_SUPPORTED_DEVICE("uClinux2.4.x LPC2200 DM9000");MODULE_AUTHOR("chenmingji");/*********************************************************************************************************
**                  "全局和靜態變量在這里定義"         
**        global variables and static variables define here
********************************************************************************************************/
static unsigned int usage;static u32 PinSel0Save;
static board_info_t NetDriverInfo[1];
/********************************************************************************************************/
static struct net_device net_net ={    name:           "eth0",    init:           net_init,    base_addr:      IOaddress0,    irq:            NET_IRQ,    watchdog_timeo: NET_TIMEOUT,};
/*********************************************************************************************************
** Function name:           ior
**
** Descriptions:            read a reg form dm9000 
**
** input parameters:        board_info_t *db    ;dm9000 status struct
**                          reg                 ;reg address of dm9000
** Returned value:          uint8               ;reg value 
**         
** Used global variables:   None
** Calling modules:         None
**
** Created by:              Yehaoben
** Created Date:            2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
static uint8 ior(board_info_t *db, uint8 reg)
{   
    unsigned int i;
    unsigned int rt;

    outb(reg, db->ioaddr);
    for (i = 0; i < BUS_DELAY; i++)
    {
    }

    rt = inb(db->io_data);
    for (i = 0; i < BUS_DELAY; i++)
    {
    }
    
    return rt;
}
/*********************************************************************************************************
** Function name:           iow
**
** Descriptions:            write a value to a dm9000 reg  
**
** input parameters:        board_info_t *db    ;dm9000 status struct
**                          reg                 ;reg address of dm9000
**                          value               ;reg value 
** Returned value:          None 
**         
** Used global variables:   None
** Calling modules:         None
**
** Created by:              Yehaoben
** Created Date:            2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static void iow(board_info_t *db, uint8 reg, uint8 value)
{
    unsigned int i;
    
    outb(reg, db->ioaddr);
    for(i = 0; i<BUS_DELAY; i++)
    {
    }
    
    outb(value, db->io_data);
    for(i = 0; i<BUS_DELAY; i++)
    {
    }
}
/*********************************************************************************************************
** Function name:           phy_write
**
** Descriptions:            write a value to PHY device reg   
**
** input parameters:        board_info_t *db    ;dm9000 status struct
**                          reg                 ;reg address of PHY device
**                          value               ;reg value  
** Returned value:          None 
**         
** Used global variables:   None
** Calling modules:         None
**
** Created by:              Yehaoben
** Created Date:            2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static void phy_write(board_info_t *db, uint8 reg, uint16 value)
{
    /* Fill the phyxcer register into REG_0C */
    iow(db, 0xc, DM9000_PHY | reg);

    /* Fill the written data into REG_0D & REG_0E */
    iow(db, 0xd, (value & 0xff));
    iow(db, 0xe, ( (value >> 8) & 0xff));

    iow(db, 0xb, 0xa);      /* Issue phyxcer write command */
    udelay(500);            /* Wait write complete */
    iow(db, 0xb, 0x0);      /* Clear phyxcer write command */
}
/*********************************************************************************************************
** Function name:           set_PHY_mode
**
** Descriptions:            set the PHY device working   
**
** input parameters:        board_info_t *db    ;dm9000 status struct
**                            
** Returned value:          None 
**         
** Used global variables:   None
** Calling modules:         None
**
** Created by:              Yehaoben
** Created Date:            2004/02/02
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static void set_PHY_mode(board_info_t *db)
{
    unsigned int phy_reg4 = 0x01e1, phy_reg0=0x1000;

    if ( !(db->op_mode & DM9000_AUTO))
    {
        switch(db->op_mode)
        {
            case DM9000_10MHD:
                phy_reg4 = 0x21; /* 10M HALF DUPLEX*/
                phy_reg0 = 0x0000; 
                break;
            case DM9000_10MFD:
                phy_reg4 = 0x41; /* 10M FULL DUPLEX*/
                phy_reg0 = 0x1100; 
                break;
            case DM9000_100MHD:
                phy_reg4 = 0x81; /* 100M HALF DUPLEX*/
                phy_reg0 = 0x2000; 
                break;
            case DM9000_100MFD:
                phy_reg4 = 0x101;/* 100M HALF DUPLEX */ 
                phy_reg0 =0x3100; 
                break;
            default:
                break;
        }
        phy_write(db, 4, phy_reg4); /* Set PHY media mode */
        phy_write(db, 0, phy_reg0); /*  Tmp */
    }

    iow(db, 0x1e, 0x01);            /* Let GPIO0 output */
    iow(db, 0x1f, 0x00);            /* Enable PHY */
}
/*********************************************************************************************************
** Function name: device_init
** Descriptions:  device init
** Input: dev:    information of device
**        
** Output: 0:     OK
**         other: errno
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int device_init(struct net_device *dev){    unsigned long flag;    uint8   i;
    board_info_t *db = dev->priv;

    local_irq_save(flag);
    /* 硬件復位復位 */

    Hardware_Initial0();
    db->ioaddr = IOaddress0;
    db->io_data = IOaddress0 + 4;
    /* RESET device */
    /*Hardware Reset*/
    Hardware_Reset_Clr0();
    udelay(500);
    Hardware_Reset_Set0();
    udelay(500);
    Hardware_Reset_Clr0();
    udelay(500);    

    /*software reset*/
    iow(db, 0, 1);         
    udelay(500);              /* delay 100us */
    /* I/O mode */
    db->io_mode = ior(db, 0xfe) >> 6; /* ISR bit7:6 keeps I/O mode *///read the io mode (8/16/32bits)

    /* NIC Type: FASTETHER, HOMERUN, LONGRUN */
    db->nic_type = FASTETHER_NIC; //identify_nic(db);   //just check for dm9801 or dm9802

    /* GPIO0 on pre-activate PHY */
    iow(db, 0x1f, 0x00);       /*REG_1F bit0 activate internal phyxcer*/

    /* Set PHY */
    db->op_mode = DM9000_AUTO;//may set it to be each one of DM9000_PHY_mode type.
    set_PHY_mode(db);

    /* Init needed register value */
    db->reg0 = DM9000_REG00;
    if ((db->nic_type != FASTETHER_NIC) && (db->op_mode & DM9000_1M_HPNA) )//for dm9801 or dm9802
    {
        db->reg0 |= DM9000_EXT_MII;
    }
    
    /* User passed argument */
    db->reg5 = DM9000_REG05;
    db->reg8 = DM9000_REG08;
    db->reg9 = DM9000_REG09;
    db->rega = DM9000_REG0A;

    /* Program operating register */
    iow(db, 0x00, db->reg0);/* DISCARD LONG\CRC_ERR\mutilcast\Promiscuous\WatchDog,Pass Runt,RX not enable */
    iow(db, 0x02, 0X14);     /* TX Polling clear *///??????????????enable the PAD //OLD VALUE IS 0X00
    iow(db, 0x08, 0x3f);     /* Less 3Kb, 600us */
    iow(db, 0x09, db->reg9); /* Flow Control : High/Low Water */
    iow(db, 0x0a, db->rega); /* Flow Control */
    iow(db, 0x2f, 0);        /* Special Mode */
    iow(db, 0x01, 0x2c);     /* clear TX status *///clear wakeup status; clear TX2END and TX1END
    iow(db, 0xfe, 0x0f);         /* Clear interrupt status */


    /* Set address filter table */
    for(i = 0; i < 6; i++)
    {
        db->nic_mac[i] = MyMacID[i];
    }

    for(i = 0; i < 6; i++)
    {
        iow(db, 0x10 + i, db->nic_mac[i]);  //將芯片物理地址寫入到MAC寄存器
    }

    /* Activate DM9000 */
    iow(db, 0x05, db->reg5 | 1); /* RX enable */
    iow(db, 0xff, DM9000_REGFF);     /* Enable TX/RX interrupt mask */
    //udelay(5000); 

    local_irq_restore(flag);

    return 0;}
/*********************************************************************************************************
** Function name: net_init
** Descriptions:  net device init
** Input: dev:    information of device
**        
** Output: 0:     OK
**         other: errno
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int net_init(struct net_device *dev){    ether_setup(dev); /* assign some of the fields */    dev->open            = net_open;    dev->stop            = net_release;    dev->set_config      = net_config;    dev->hard_start_xmit = net_tx;
    dev->set_mac_address = net_set_mac_address;    dev->flags           &= ~(IFF_LOOPBACK | IFF_MULTICAST);
    dev->priv            = NetDriverInfo;    memcpy(dev->dev_addr, MyMacID, dev->addr_len);    SET_MODULE_OWNER(dev);    return 0;}/*********************************************************************************************************
** Function name: net_config
** Descriptions:  config device
** Input: dev:    information of device
**        map:    config data
** Output: 0:     OK
**         other: errno
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int net_config(struct net_device *dev, struct ifmap *map){    return -EBUSY;}
/*********************************************************************************************************
** Function name: net_set_mac_address
** Descriptions:  set mac address
** Input: dev:    information of device
**        addr:   config data
** Output: 0:     OK
**         other: errno
** Created by:    Chenmingji
** Created Date:  2005-05-12
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        static int net_set_mac_address(struct net_device *dev, void *addr)
{
    struct sockaddr *mac_addr;    int i;

    mac_addr = addr;    if (netif_running(dev))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区| 一区二区三区欧美| 国产成人av资源| 国产欧美精品在线观看| 成人av集中营| 亚洲一区二区三区影院| 欧美电影在哪看比较好| 久久精品国产秦先生| 久久蜜桃香蕉精品一区二区三区| 国产麻豆日韩欧美久久| 中文字幕永久在线不卡| 欧美视频中文一区二区三区在线观看| 亚洲黄色免费网站| 91麻豆精品国产自产在线 | 国产精品国产三级国产aⅴ原创| 丁香婷婷综合色啪| 一区二区视频在线| 日韩欧美中文字幕制服| 成人免费毛片高清视频| 亚洲夂夂婷婷色拍ww47| 精品日韩在线观看| 一本色道久久综合精品竹菊| 亚洲成人av电影| 久久久精品日韩欧美| 欧美亚洲一区二区在线| 精品亚洲欧美一区| 亚洲乱码日产精品bd| 日韩欧美国产一区二区在线播放| 成人小视频在线| 婷婷综合另类小说色区| 精品粉嫩超白一线天av| 色婷婷综合激情| 国产在线精品一区二区不卡了| 国产精品美女一区二区三区| 欧美亚洲动漫制服丝袜| 久久精品国产一区二区三| 亚洲欧美综合色| 91精品国产麻豆国产自产在线| 国产一区二区在线视频| 亚洲午夜免费视频| 日本一区二区在线不卡| 日韩欧美中文字幕精品| 色网站国产精品| 风间由美一区二区三区在线观看 | 91尤物视频在线观看| 毛片基地黄久久久久久天堂| 亚洲三级在线免费| 精品国精品国产| 欧美中文字幕不卡| 成人在线视频一区| 久久国产综合精品| 亚洲精品久久7777| 欧美激情资源网| 精品噜噜噜噜久久久久久久久试看 | 国产精品一区二区三区乱码| 亚洲大片免费看| 亚洲激情自拍视频| 亚洲桃色在线一区| 国产精品嫩草影院av蜜臀| 精品国产免费人成在线观看| 欧美午夜片在线观看| 一本久道中文字幕精品亚洲嫩| 国产高清一区日本| 国产美女视频一区| 国产一区二区在线观看视频| 日本vs亚洲vs韩国一区三区二区| 亚洲综合色婷婷| 亚洲精品国产a| 夜夜精品浪潮av一区二区三区| 亚洲欧洲另类国产综合| 国产欧美一二三区| 中文av字幕一区| 最新成人av在线| 国产精品国产三级国产aⅴ原创 | 久久99精品国产麻豆婷婷洗澡| 日韩和欧美的一区| 日韩电影在线观看电影| 日韩成人一级大片| 奇米精品一区二区三区在线观看| 午夜国产精品一区| 日韩高清不卡一区二区三区| 青青草97国产精品免费观看无弹窗版| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲嫩草精品久久| 一区二区三区四区蜜桃| 亚洲成va人在线观看| 日本欧美一区二区| 激情综合网激情| 国产成人在线观看| 99re这里只有精品6| 欧洲精品在线观看| 91精品久久久久久久91蜜桃| 日韩视频不卡中文| 久久日韩粉嫩一区二区三区| 国产三区在线成人av| 中文字幕一区二区三区不卡| 樱桃视频在线观看一区| 天天综合日日夜夜精品| 精品一区二区三区av| 国产成人精品综合在线观看 | 国产伦精一区二区三区| 国产福利精品导航| av在线不卡网| 欧美色爱综合网| 欧美xxxxx牲另类人与| 国产精品婷婷午夜在线观看| 亚洲乱码日产精品bd| 日本不卡视频在线观看| 成人激情文学综合网| 欧美日韩国产123区| 欧美精品一区二区久久婷婷| 国产精品久久久久久久久图文区| 亚洲国产精品影院| 国产成人精品www牛牛影视| 在线区一区二视频| 久久九九久久九九| 亚洲一区二区偷拍精品| 国内成人自拍视频| 欧美在线免费观看视频| 久久人人爽爽爽人久久久| 亚洲一区二区精品久久av| 国产麻豆视频精品| 欧美日韩国产一二三| 亚洲国产精品成人综合色在线婷婷 | 欧美最猛性xxxxx直播| 精品剧情在线观看| 亚洲色图丝袜美腿| 国产在线精品一区二区三区不卡| 日本丶国产丶欧美色综合| 久久青草欧美一区二区三区| 亚洲图片自拍偷拍| 粉嫩av一区二区三区在线播放| 91精品视频网| 亚洲欧美一区二区三区国产精品| 精品一区二区精品| 欧美日韩亚洲综合一区二区三区| 国产精品美女久久久久aⅴ| 免费在线视频一区| 欧美视频在线一区二区三区| 国产欧美精品一区二区色综合| 蜜桃91丨九色丨蝌蚪91桃色| 在线精品国精品国产尤物884a| 国产精品网站导航| 国产一区二区三区最好精华液| 欧美日韩亚洲高清一区二区| 中文字幕制服丝袜成人av| 国产精品综合在线视频| 欧美一区二区三区思思人| 夜色激情一区二区| 一本高清dvd不卡在线观看| 中文字幕一区二区视频| 成人免费看的视频| 国产日本一区二区| 国产成人高清视频| 欧美精品一区二区三区久久久| 久久精品国内一区二区三区| 337p亚洲精品色噜噜噜| 亚洲国产婷婷综合在线精品| 色av成人天堂桃色av| 亚洲视频一二三| 日本韩国欧美国产| 一区二区国产盗摄色噜噜| 91麻豆福利精品推荐| 亚洲乱码日产精品bd| 色噜噜狠狠一区二区三区果冻| 中文字幕视频一区二区三区久| 国产91精品久久久久久久网曝门| 久久伊人蜜桃av一区二区| 国内成人免费视频| 中文字幕欧美三区| 成人网页在线观看| 亚洲视频香蕉人妖| 91久久精品午夜一区二区| 亚洲综合一区二区精品导航| 91久久精品国产91性色tv| 亚洲一区二区三区三| 91麻豆精品国产无毒不卡在线观看| 秋霞午夜av一区二区三区| 国产精品理伦片| eeuss鲁一区二区三区| 亚洲精品中文字幕在线观看| 色成人在线视频| 日韩1区2区3区| 欧美大胆一级视频| 国产黄色精品网站| 亚洲欧洲国产专区| 欧美日韩专区在线| 久久99热99| 欧美国产日韩精品免费观看| 91香蕉视频黄| 五月激情综合婷婷| 国产欧美日韩中文久久| 99久久精品国产毛片| 亚洲成av人综合在线观看| 26uuu精品一区二区在线观看| 成人教育av在线| 午夜久久电影网| 久久久777精品电影网影网 | 成人福利视频在线| 亚洲国产日韩在线一区模特|