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

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

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

db->type = TYPE_DM9000B;

break;

default:

dev_dbg(db->dev, "ID x => defaulting to DM9000E\n", id_val);

db->type = TYPE_DM9000E;

}

if (db->type == TYPE_DM9000A || db->type == TYPE_DM9000B) {

db->can_csum = 1;

db->rx_csum = 1;

ndev->features |= NETIF_F_IP_CSUM;

}

ether_setup(ndev);

ndev->netdev_ops = &dm9000_netdev_ops;

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;

}

这样,最后完成了网络设备的数据保存到总线上,将网络设备注册到内核。

4、设备的移除函数

view plainprint?

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;

}

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

网站地图

Top