Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1919658
  • 博文数量: 376
  • 博客积分: 2147
  • 博客等级: 大尉
  • 技术积分: 3642
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-06 10:47
文章分类

全部博文(376)

文章存档

2019年(3)

2017年(28)

2016年(15)

2015年(17)

2014年(182)

2013年(16)

2012年(115)

我的朋友

分类: LINUX

2012-02-07 14:57:31

发送函数把数据准备好(放在私有数据结构中的特定变量中),并触发硬件发送。
    1、从发送缓冲区环中选择一个空的缓冲区,包括tx_ring, tx_skbuff, tx_dma_addr。
    2、设置tx_ring的成员,length设为待发送数据长度取反,misc设零,base设为tx_dma_addr,status设为缺省的0x8300。
    3、tx_skbuff指向待发送数据套接字缓冲区skb。
    4、将skb映射成的dma地址存放在tx_dma_addr中。
    5、cur_tx ++;
    6、写网卡硬件,触发一个立即发送的信号。
    7、检查环是否已用完,如果是,暂停后续发送。

    中断处理函数中,其主要工作是把已发送过的缓冲区回收,使其重新可用。
    1、如果dirty_tx < cur_tx,则说明有已送完的缓冲区还没回收掉,循环处理。
    2、检查tx_ring的成员status,如果<0 不用处理,退出。
    3、如果(status & 0x4000 != 0),则发送出错,处理处理。
    4、回收已发送掉的缓冲区。
    5、dirty_tx ++;
    6、如果前面已经因为环用完,而发送被暂停,而现在已有空余缓冲区,则继续发送。
阅读(1600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~