网站大量收购独家精品文档,联系QQ:2885784924

ARM-Linux驱动--DM9000网卡驱动分析(三).doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM-Linux驱动--DM9000网卡驱动分析(三) 下面开始看网卡设备的打开、关闭函数和操作函数 [cpp]? \o view plain view plain \o copy copy static?const?struct?net_device_ops?dm9000_netdev_ops?=?{?? ????.ndo_open???????=?dm9000_open,/*?打开设备函数?*/?? ????.ndo_stop???????=?dm9000_stop,/*?关闭设备函数?*/?? ????.ndo_start_xmit?????=?dm9000_start_xmit,/*?开始发送数据?*/?? ????.ndo_tx_timeout?????=?dm9000_timeout,/*?发送超时?*/?? ????.ndo_set_multicast_list?=?dm9000_hash_table,/*?设定多播列表?*/?? ????.ndo_do_ioctl???????=?dm9000_ioctl,/*?io操作函数?*/?? ????.ndo_change_mtu?????=?eth_change_mtu,/*?改变MTU?*/?? ????.ndo_validate_addr??=?eth_validate_addr,?? ????.ndo_set_mac_address????=?eth_mac_addr,?? #ifdef?CONFIG_NET_POLL_CONTROLLER?? ????.ndo_poll_controller????=?dm9000_poll_controller,?? #endif?? };?? 1、DM9000的打开函数 由于在函数alloc_netdev_mq()中分配net_device和网卡的私有数据是一起分配的,详见函数的实现 [cpp]? \o view plain view plain \o copy copy struct?net_device?*alloc_netdev_mq(int?sizeof_priv,?const?char?*name,?? ????????void?(*setup)(struct?net_device?*),?unsigned?int?queue_count)?? {?? ...................?? alloc_size?=?sizeof(struct?net_device);?? ????if?(sizeof_priv)?{?? ????????/*?ensure?32-byte?alignment?of?private?area?*/?? ????????alloc_size?=?ALIGN(alloc_size,?NETDEV_ALIGN);?? ????????alloc_size?+=?sizeof_priv;?? ????}?? ????/*?ensure?32-byte?alignment?of?whole?construct?*/?? ????alloc_size?+=?NETDEV_ALIGN?-?1;?? ?? ????p?=?kzalloc(alloc_size,?GFP_KERNEL);?? ????if?(!p)?{?? ????????printk(KERN_ERR?alloc_netdev:?Unable?to?allocate?device.\n);?? ????????return?NULL;?? ????}?? ?? ????tx?=?kcalloc(queue_count,?sizeof(struct?netdev_queue),?GFP_KERNEL);?? ????if?(!tx)?{?? ????????printk(KERN_ERR?alloc_netdev:?Unable?to?allocate??? ???????????????tx?qdiscs.\n);?? ????????goto?free_p;?? ????}?? ?? #ifdef?CONFIG_RPS?? ????rx?=?kcalloc(queue_count,?sizeof(struct?netdev_rx_queue),?GFP_KERNEL);?? ????if?(!rx)?{?? ????????printk(KERN_ERR?alloc_netdev:?Unable?to?allocate??? ???????????????rx?queues.\n);?? ????????goto?free_tx;?? ????}?? ..............?? }?? 所以使用函数n

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档