dm9000 net_device_ops 的函数解析

函数列表
主要是 
dm9000_init  // 初始化完了dm9000
			// 在dm9000.c 中 这个函数为空,dm9000的初始化逻辑是放在 dm9000_probe 中的
dm9000_open // 申请中断,打开了dm9000的中断
dm9000_interrupt   // 处理中断事务
					// 里面有 收数据,发数据完成 等
dm9000_start_xmit  // 发送数据
astonnet
astonnet_open 中只做了一件事
	netif_start_queue(dev); //打开传输队列,这样才能进行数据传输 

astonnet 没有实现中断,astonnet_rx 中做了一件事
	1. 申请了skb
	2. 将网卡中的数据放置到 skb_put(skb, len)
	3. netif_rx(skb);

astonnet_tx 中做了一件事
	1. 将len 和data 从 skb->len 和 skb->data 中取出
	2. 控制硬件发出数据
	3. dev_kfree_skb(skb);
dm9000
dm9000_open 
	初始化dm9000的mac 和phy
	注册中断
	打开(unmask)dm9000(设备侧)的中断
	netif_start_queue(dev); // Allow upper layers to call the device hard_start_xmit routine.
	mii_check_media(&db->mii, netif_msg_link(db), 1); // 查看是否linkup
dm9000_start_xmit
	上锁
	
	拷贝数据到ram
	控制 dm9000 , 发送数据
	
	去锁
dm9000_interrupt : link change
	上锁
	读取中断源(因为多合一),关闭(mask)dm9000设备侧中断
	
	如果中断源 为 ISR_LNKCHNG , mii_check_media(&db->mii, netif_msg_link(db), 1); // 查看是否linkup
	
	打开 dm9000 中断
	去锁
dm9000_interrupt : 收到数据
	上锁
	读取中断源(因为多合一),关闭(mask)dm9000设备侧中断
	
	如果中断源 为 ISR_PRS
		申请skb
		读取ram,获取 len & data ,填充到sbk
		netif_rx(skb);
	
	打开 dm9000 中断
	去锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值