09-网络设备的打开与释放
16.4 网络设备的打开与释放
网络设备的打开函数需要完成如下工作。
● 使能设备使用的硬件资源,申请I/O区域、中断和DMA通道等。
● 调用Linux内核提供的netif_start_queue()函数,激活设备发送队列。
网络设备的关闭函数需要完成如下工作。
● 调用Linux内核提供的netif_stop_queue()函数,停止设备传输包。
● 释放设备所使用的I/O区域、中断和DMA资源。
Linux内核提供的netif_start_queue()和netif_stop_queue()两个函数的原型为:
void netif_start_queue(struct net_device *dev);
void netif_stop_queue (struct net_device *dev);
根据以上分析,可得出如代码清单16.6所示的网络设备打开和释放函数的模板。
代码清单16.6 网络设备打开和释放函数模板
1 int xxx_open(struct net_device *dev)
2 {
3 / 申请端口、IRQ等,类似于fops->open /
4 ret = request_irq(dev->irq, &xxx_interrupt, 0, dev->name, dev);
5 ...
6 netif_start_queue(dev);
7 ...
8 }
9
10 int xxx_release(struct net_device *dev)
11 {
12 / 释放端口、IRQ等,类似于fops->close /
13 free_irq(dev->irq, dev);
14 ...
15 netif_stop_queue(dev); / can't transmit any more /
16 ...
17 }