免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1834 | 回复: 2
打印 上一主题 下一主题

网卡驱动中的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-25 17:14 |只看该作者 |倒序浏览
u32 ring_offset = cur_rx % RX_BUF_LEN;
这是计算缓冲区中的偏移量吗?如果是怎么不用cur_rx-rx_ring?
rx_status = le32_to_cpu (*(__le32 *) (rx_ring + ring_offset));
这句又是什么作用?
rx_size = rx_status >> 16;
这句也是不理解,可能都是第一句引起的问题,请牛人解惑!

论坛徽章:
0
2 [报告]
发表于 2009-07-25 22:09 |只看该作者
1·一般循环队列的计算偏移都是用%

2·le32_to_cpu 我觉得是读硬件寄存器吧。应该是读dma状态

3·这个表示读出的rx_status的高16bits记录的是rx_size

论坛徽章:
0
3 [报告]
发表于 2009-07-25 23:14 |只看该作者
1.cur_rx好象是指向下一个队列的当前地址吧,那么用他%buffer长度能得到偏移吗,除非缓冲区起始地址为0,但缓冲区不可能在内存的0位置啊,不知道我哪理解错了?
2.le32_to_cpu 是小头字节序,这个好理解,关键是缓冲区启始地址加偏移有什么用?
3.基于上面的理解,把缓冲区启始地址加偏移右移动16位就能得到下个要接受的数据包的大小更无法理解了...
驱动中说这3条语句就是得到下个要接收数据包的大小.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP