dm9000 net_device_ops 的函数解析

文章目录

        • 函数列表
        • astonnet
        • dm9000

函数列表

主要是 
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 中断
	去锁

你可能感兴趣的:(杂七杂八总览,网络)