Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2225612
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2009-01-01 08:44:16

上面已经分析到中断处理的接收中断处理函数,下面分析发送中断处理函数。

在前面,我们说到系统调用dmfe_start_xmit来进行数据发送,当数据发送完成后,将产生一个数据发送中断,由interrupt函数检测到该中断后,将调用dmfe_tx_done()进行处理
static void dmfe_tx_done(unsigned long unused)
{
        struct net_device *dev = dmfe_dev;
        board_info_t *db = (board_info_t *)dev->priv;
        int nsr;
               
        nsr = ior(db, DM9KS_NSR);
        if(nsr & 0x04) db->tx_pkt_cnt--;
        if(nsr & 0x08) db->tx_pkt_cnt--;
        if (db->tx_pkt_cnt  0)
        {
                printk("[dmfe_tx_done] tx_pkt_cnt ERROR!!\n");
                db->tx_pkt_cnt =0;
        }
        if (db->Speed == 10)
                {if(db->tx_pkt_cnt  1 ) netif_wake_queue(dev);}
        else 
                {if(db->tx_pkt_cnt  2 ) netif_wake_queue(dev);}
        
        return;
}
该函数主要完成两个动作:一是把tx_pkt_cnt成员的值减少1,表示已经完成一个数据包的发送了;二是判断tx_pkt_cnt的值,根据speed的值,判断是否可以调用netif_wake_queue()函数来通知内核网卡可以接受新的数据发送任务了。
阅读(453) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~