微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM-Linux驱动--DM9000网卡驱动分析(四)

ARM-Linux驱动--DM9000网卡驱动分析(四)

时间:11-20 来源:互联网 点击:

ndev->watchdog_timeo = msecs_to_jiffies(watchdog);

ndev->ethtool_ops = &dm9000_ethtool_ops;

db->msg_enable = NETIF_MSG_LINK;

db->mii.phy_id_mask = 0x1f;

db->mii.reg_num_mask = 0x1f;

db->mii.force_media = 0;

db->mii.full_duplex = 0;

db->mii.dev = ndev;

db->mii.mdio_read = dm9000_phy_read;

db->mii.mdio_write = dm9000_phy_write;

mac_src = "eeprom";

for (i = 0; i < 6; i += 2)

dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);

if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {

mac_src = "platform data";

memcpy(ndev->dev_addr, pdata->dev_addr, 6);

}

if (!is_valid_ether_addr(ndev->dev_addr)) {

mac_src = "chip";

for (i = 0; i < 6; i++)

ndev->dev_addr[i] = ne_def_eth_mac_addr[i];

}

if (!is_valid_ether_addr(ndev->dev_addr))

dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "

"set using ifconfig\n", ndev->name);

platform_set_drvdata(pdev, ndev);

ret = register_netdev(ndev);

if (ret == 0)

printk(KERN_INFO "%s: dm9000%c at %p,%p IRQ %d MAC: %pM (%s)\n",

ndev->name, dm9000_type_to_char(db->type),

db->io_addr, db->io_data, ndev->irq,

ndev->dev_addr, mac_src);

return 0;

out:

dev_err(db->dev, "not found (%d).\n", ret);

dm9000_release_board(pdev, db);

free_netdev(ndev);

return ret;

}

static int __devexit

dm9000_drv_remove(struct platform_device *pdev)

{

struct net_device *ndev = platform_get_drvdata(pdev);

platform_set_drvdata(pdev, NULL);

unregister_netdev(ndev);

dm9000_release_board(pdev, (board_info_t *) netdev_priv(ndev));

free_netdev(ndev);

dev_dbg(&pdev->dev, "released and freed device\n");

return 0;

}

static struct platform_driver dm9000_driver = {

.driver = {

.name = "dm9000",

.owner = THIS_MODULE,

},

.probe = dm9000_probe,

.remove = __devexit_p(dm9000_drv_remove),

};

static int __init

dm9000_init(void)

{

printk(KERN_INFO "%s Ethernet Driver, V%s\n", CARDNAME, DRV_VERSION);

return platform_driver_register(&dm9000_driver);

}

static void __exit

dm9000_cleanup(void)

{

platform_driver_unregister(&dm9000_driver);

}

module_init(dm9000_init);

module_exit(dm9000_cleanup);

MODULE_AUTHOR("Modified by yan");

MODULE_DESCRIPTION("Davicom DM9000 network driver");

MODULE_LICENSE("GPL");

MODULE_ALIAS("platform:dm9000");

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top