网卡驱动中的疑惑
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;
这句也是不理解,可能都是第一句引起的问题,请牛人解惑! 1·一般循环队列的计算偏移都是用%
2·le32_to_cpu 我觉得是读硬件寄存器吧。应该是读dma状态
3·这个表示读出的rx_status的高16bits记录的是rx_size 1.cur_rx好象是指向下一个队列的当前地址吧,那么用他%buffer长度能得到偏移吗,除非缓冲区起始地址为0,但缓冲区不可能在内存的0位置啊,不知道我哪理解错了?
2.le32_to_cpu 是小头字节序,这个好理解,关键是缓冲区启始地址加偏移有什么用?
3.基于上面的理解,把缓冲区启始地址加偏移右移动16位就能得到下个要接受的数据包的大小更无法理解了...
驱动中说这3条语句就是得到下个要接收数据包的大小.
页:
[1]