如何解决ReakTek r8169 驱动程序计数器和统计结构及其成员类型它们是否应该是用于字节排序的 le64/le32/etc 类型
我正在阅读 RealTek r8169 驱动程序。其中有硬件相关的结构体并在 DMA 中使用。所以我有 Counter 的结构,还有 Rx Descriptor 和 Tx Descriptor。
这是结构rtl8169_counters
struct rtl8169_counters {
__le64 tx_packets;
__le64 rx_packets;
__le64 tx_errors;
__le32 rx_errors;
__le16 rx_missed;
__le16 align_errors;
__le32 tx_one_collision;
__le32 tx_multi_collision;
__le64 rx_unicast;
__le64 rx_broadcast;
__le32 rx_multicast;
__le16 tx_aborted;
__le16 tx_underun;
};
我注意到硬件相关结构及其成员使用 __le32
或 __le64
或类似的类型来表示较小的值。 CPU 类型与 C 中的类型相同,如 struct page
或 int
/char
等。还有一个函数,如 le32_to_cpu(descriptor->opts2);
将值转换为 CPU 字节顺序从le32/le64/等
所以我想知道为了设备(即网卡)接受结构体或变量,类型应该是le16/le32/le64?
所以我的 Rx 描述符或计数器结构可以被 NIC 卡访问,因此它可以将计数器值从设备写入 DMA 缓冲区,也可以将数据包从 NIC 内部寄存器写入 DMA 缓冲区。
这是正确的理解吗?
所以基本上我的理解是 le64
类型是特定于设备的(即 NIC 卡),其余的普通 C 类型是特定于处理器的,因此为了匹配应该有像 le32_to_cpu
这样的函数,等等?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。