- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 航空服务对中国民航发展影响的研究.doc
- 合肥工业大学工程图学答汇总全部.pptx
- 建筑工程图集 11SG814:建筑基坑支护结构构造.pdf VIP
- 2025年高考语文易错题:文学类文本阅读之教考衔接题——对语文教材不熟,衔接脱节(含答案).pdf VIP
- 机械制造技术基础习题答案4 .pdf VIP
- 电子元器件知识.pptx VIP
- AS300A门机控制器说明书-2023A1版.pdf
- 2024年高考语文考试(新高考)16文学类文本阅读之教考衔接题——对语文不熟,衔接脱节(解析版).pdf VIP
- 丁锦红-认知心理学(第3版)第3章-知觉与模式识别.pptx VIP
- 灌肠技术操作.pptx VIP
文档评论(0)