当前位置:嗨网首页>书籍在线阅读

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 }