e1000.h : 驱动头文件
e1000_ethtool.c : ethtool接口
e1000_hw.c e1000_hw.h : 和硬件(PCI)相关头文件和实现
e1000_main.c : 主函数
e1000_osdep.h : 寄存器操作
e1000_param.c : proc接口参数
module_init(e1000_init_module);
module_exit(e1000_exit_module);
static int __init
e1000_init_module(void)
{
int ret;
printk(KERN_INFO "%s - version %s/n",
e1000_driver_string, e1000_driver_version);
printk(KERN_INFO "%s/n", e1000_copyright);
ret = pci_module_init(&e1000_driver);
return ret;
}
e1000_driver变量的定义:
static struct pci_driver e1000_driver = {
.name = e1000_driver_name,
.id_table = e1000_pci_tbl,
.probe = e1000_probe,
.remove = __devexit_p(e1000_remove),
/* Power Managment Hooks */
#ifdef CONFIG_PM
.suspend = e1000_suspend,
.resume = e1000_resume
#endif
};
e1000_probe函数定义:
static int __devinit
e1000_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
if ((err = pci_enable_device(pdev)))
return err;
netdev = alloc_etherdev(sizeof(struct e1000_adapter));
if (!netdev) {
err = -ENOMEM;
goto err_alloc_etherdev;
}
netdev->open = &e1000_open;
netdev->stop = &e1000_close;
netdev->hard_start_xmit = &e1000_xmit_frame;
netdev->get_stats = &e1000_get_stats;
netdev->set_multicast_list = &e1000_set_multi;
netdev->set_mac_address = &e1000_set_mac;
netdev->change_mtu = &e1000_change_mtu;
netdev->do_ioctl = &e1000_ioctl;
e1000_set_ethtool_ops(netdev);
netdev->tx_timeout = &e1000_tx_timeout;
netdev->watchdog_timeo = 5 * HZ;
#ifdef CONFIG_E1000_NAPI
netdev->poll = &e1000_clean;
netdev->weight = 64;
#endif
netdev->vlan_rx_register = e1000_vlan_rx_register;
netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid;
netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
#ifdef CONFIG_NET_POLL_CONTROLLER
netdev->poll_controller = e1000_netpoll;
#endif
strcpy(netdev->name, pci_name(pdev));
netdev->mem_start = mmio_start;
netdev->mem_end = mmio_start + mmio_len;
netdev->base_addr = adapter->hw.io_base;