LAN9221网卡驱动之二 NAPI接收

本文介绍了LAN9221网卡如何利用NAPI(Non-Blocking Polling IO)机制处理接收数据。在大量数据传输时,NAPI通过中断触发驱动接收,并在轮询函数中按预设预算(budget)接收数据包。当数据未完全接收时,中断会再次激活,直至所有数据接收完毕。这种方式有效平衡了中断频率和CPU资源消耗。
摘要由CSDN通过智能技术生成

转载请注明出处:http://blog.csdn.net/qq405180763/article/details/8800391

LAN9221采用NAPI方式读取网卡缓存内数据。当接主机收大量网络数据时,网卡中断触发驱动程序接收数据,驱动程序被触发后调用轮询函数,在轮询函数里接收固定个数据包后,固定个数据为budget,一般是轮询注册函数netif_napi_add的第三个参数weight,如果数据还没接收完毕,则中断再次被触发(中断标志位没有被清除),继续轮询接收数据,知道数据被完全接收完毕,则在轮询函数里将中断标志位清楚,关闭轮询函数,重新使能中断接收下一组数据。NAPI的好处就是既避免了在接收大量数据时频繁的中断,又不必因为轮询而耗费大量CPU资源,结合了中断和轮询的优点。

static int smsc911x_poll(struct napi_struct *napi, int budget)
{
 struct smsc911x_data *pdata =
  container_of(napi, struct smsc911x_data, napi);
 struct net_device *dev = pdata->dev;
 int npackets = 0;

 while (npackets < budget) { /*不管数据是否接收完毕,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值