Altera 三速以太网 MAC 驱动¶
版权所有 © 2008-2014 Altera Corporation
这是 Altera 三速以太网 (TSE) 控制器的驱动程序,使用 SGDMA 和 MSGDMA 软 DMA IP 组件。该驱动程序使用平台总线获取组件资源。用于测试此驱动程序的设计是为 Cyclone(R) V SOC FPGA 板和 Cyclone(R) V FPGA 板构建的,并分别通过 ARM 和 NIOS 处理器主机进行了测试。预期用例是嵌入式系统与外部对等设备之间进行简单的通信,以获取嵌入式系统的状态和简单配置。
欲了解更多信息,请访问 www.altera.com 和 www.rocketboards.org。有关此驱动程序的论坛支持可在 www.rocketboards.org 上找到,并且用于测试此驱动程序的设计也可能在那里找到。本驱动程序的维护者(可在 MAINTAINERS 文件中找到)也提供支持。
三速以太网、SGDMA 和 MSGDMA 组件都是软 IP 组件,可以使用 Altera Quartus 工具链组装并构建到 FPGA 中。Quartus 13.1 和 14.0 用于构建测试此驱动程序的设计。sopc2dts 工具用于为驱动程序创建设备树,可在 rocketboards.org 上找到。
驱动程序的探测函数检查设备树并确定三速以太网实例使用的是 SGDMA 还是 MSGDMA 组件。然后,探测函数安装适当的 DMA 例程集,以初始化、设置传输、接收以及相应配置的中断处理原语。
SGDMA 组件将在不久的将来(截至 2014 年初撰写本文时,未来 1-2 年内)被弃用,以支持 MSGDMA 组件。SGDMA 支持包含在现有设计和参考中,以防开发人员希望支持他们自己的软 DMA 逻辑和驱动程序支持。任何新设计都不应使用 SGDMA。
SGDMA 一次只支持单个传输或接收操作,因此与 MSGDMA 软 IP 相比,性能不佳。有关已知的 SGDMA 勘误表,请访问 www.altera.com。
目前 SGDMA 或 MSGDMA 不支持 Scatter-gather DMA。Scatter-gather DMA 将在未来的维护更新中添加到此驱动程序中。
目前不支持巨型帧。
该驱动程序将 PHY 操作限制在 10/100Mbps,尚未完全测试 1Gbps。此支持将在未来的维护更新中添加。
1. 内核配置¶
内核配置选项为 ALTERA_TSE
设备驱动程序 ---> 网络设备支持 ---> 以太网驱动程序支持 ---> Altera 三速以太网 MAC 支持 (ALTERA_TSE)
2. 驱动参数列表¶
debug: 消息级别(0:无输出,16:全部);
dma_rx_num: RX 列表中的描述符数量(默认为 64);
dma_tx_num: TX 列表中的描述符数量(默认为 64)。
3. 命令行选项¶
驱动参数也可以通过命令行传递,使用
altera_tse=dma_rx_num:128,dma_tx_num:512
4. 驱动信息和注意事项¶
4.1. 传输过程¶
当内核调用驱动程序的传输例程时,它通过调用底层 DMA 传输例程(SGDMA 或 MSGDMA)设置传输描述符,并启动传输操作。传输完成后,传输 DMA 逻辑会产生一个中断。驱动程序在中断处理链的上下文中处理传输完成,通过回收发送和跟踪请求传输操作所需的资源。
4.2. 接收过程¶
驱动程序将在驱动程序初始化期间将接收缓冲区发布到接收 DMA 逻辑。接收缓冲区可能排队,也可能不排队,这取决于底层的 DMA 逻辑(MSGDMA 能够将接收缓冲区排队,SGDMA 无法将接收缓冲区排队到 SGDMA 接收逻辑)。当接收到数据包时,DMA 逻辑会生成一个中断。驱动程序通过获取 DMA 接收逻辑状态,收割接收完成,直到没有更多接收完成可用,来处理接收中断。
4.3. 中断抑制¶
驱动程序能够使用 NAPI 对接收操作进行 DMA 中断抑制。传输操作尚不支持中断抑制,但将在未来的维护版本中添加。
4.4) Ethtool 支持¶
支持 Ethtool。可以使用以下命令获取驱动程序统计信息和内部错误:ethtool -S ethX 命令。也可以转储寄存器等。
4.5) PHY 支持¶
该驱动程序与 PAL 兼容,可与 PHY 和 GPHY 设备协同工作。
4.7) 源文件列表:¶
Kconfig
Makefile
altera_tse_main.c: 主网络设备驱动程序
altera_tse_ethtool.c: ethtool 支持
altera_tse.h: 私有驱动程序结构和通用定义
altera_msgdma.h: MSGDMA 实现函数定义
altera_sgdma.h: SGDMA 实现函数定义
altera_msgdma.c: MSGDMA 实现
altera_sgdma.c: SGDMA 实现
altera_sgdmahw.h: SGDMA 寄存器和描述符定义
altera_msgdmahw.h: MSGDMA 寄存器和描述符定义
altera_utils.c: 驱动程序实用函数
altera_utils.h: 驱动程序实用函数定义
5. 调试信息¶
驱动程序导出调试信息,例如内部统计信息、调试信息、MAC 和 DMA 寄存器等。
用户可以使用 ethtool 支持获取统计信息:例如使用:ethtool -S ethX(显示统计计数器)或查看 MAC 寄存器:例如使用:ethtool -d ethX
开发人员还可以使用“debug”模块参数获取进一步的调试信息。
6. 统计支持¶
控制器和驱动程序支持 IEEE 标准定义统计、RFC 定义统计以及驱动程序或 Altera 定义统计的混合。包含这些统计标准定义的四个规范如下:
IEEE 802.3-2012 - IEEE 以太网标准。
RFC 2863,可在 http://www.rfc-editor.org/rfc/rfc2863.txt 找到。
RFC 2819,可在 http://www.rfc-editor.org/rfc/rfc2819.txt 找到。
Altera 三速以太网用户指南,可在 http://www.altera.com 找到
TSE 和设备驱动程序支持的统计信息如下:
“tx_packets” 等同于 IEEE 802.3-2012 第 5.2.2.1.2 节中定义的 aFramesTransmittedOK。此统计信息是成功传输的帧数。
“rx_packets” 等同于 IEEE 802.3-2012 第 5.2.2.1.5 节中定义的 aFramesReceivedOK。此统计信息是成功接收的帧数。此计数不包括任何错误数据包,例如 CRC 错误、长度错误或对齐错误。
“rx_crc_errors” 等同于 IEEE 802.3-2012 第 5.2.2.1.6 节中定义的 aFrameCheckSequenceErrors。此统计信息是长度为整数字节且在接收帧时未通过 CRC 测试的帧数。
“rx_align_errors” 等同于 IEEE 802.3-2012 第 5.2.2.1.7 节中定义的 aAlignmentErrors。此统计信息是长度非整数字节且在接收帧时未通过 CRC 测试的帧数。
“tx_bytes” 等同于 IEEE 802.3-2012 第 5.2.2.1.8 节中定义的 aOctetsTransmittedOK。此统计信息是成功从接口传输的数据和填充字节数。
“rx_bytes” 等同于 IEEE 802.3-2012 第 5.2.2.1.14 节中定义的 aOctetsReceivedOK。此统计信息是控制器成功接收的数据和填充字节数。
“tx_pause” 等同于 IEEE 802.3-2012 第 30.3.4.2 节中定义的 aPAUSEMACCtrlFramesTransmitted。此统计信息是网络控制器传输的 PAUSE 帧数。
“rx_pause” 等同于 IEEE 802.3-2012 第 30.3.4.3 节中定义的 aPAUSEMACCtrlFramesReceived。此统计信息是网络控制器接收的 PAUSE 帧数。
“rx_errors” 等同于 RFC 2863 中定义的 ifInErrors。此统计信息是接收到的包含错误从而阻止数据包传递到更高层协议的数据包数量。
“tx_errors” 等同于 RFC 2863 中定义的 ifOutErrors。此统计信息是由于错误而无法传输的数据包数量。
“rx_unicast” 等同于 RFC 2863 中定义的 ifInUcastPkts。此统计信息是接收到的未寻址到广播地址或多播组的数据包数量。
“rx_multicast” 等同于 RFC 2863 中定义的 ifInMulticastPkts。此统计信息是接收到的寻址到多播地址组的数据包数量。
“rx_broadcast” 等同于 RFC 2863 中定义的 ifInBroadcastPkts。此统计信息是接收到的寻址到广播地址的数据包数量。
“tx_discards” 等同于 RFC 2863 中定义的 ifOutDiscards。此统计信息是未检测到错误但仍未传输的出站数据包数量。发生这种情况的一个例子是为了释放内部缓冲区空间。
“tx_unicast” 等同于 RFC 2863 中定义的 ifOutUcastPkts。此统计信息计数传输的未寻址到多播组或广播地址的数据包数量。
“tx_multicast” 等同于 RFC 2863 中定义的 ifOutMulticastPkts。此统计信息计数传输的寻址到多播组的数据包数量。
“tx_broadcast” 等同于 RFC 2863 中定义的 ifOutBroadcastPkts。此统计信息计数传输的寻址到广播地址的数据包数量。
“ether_drops” 等同于 RFC 2819 中定义的 etherStatsDropEvents。此统计信息计数由于缺少内部控制器资源而丢弃的数据包数量。
“rx_total_bytes” 等同于 RFC 2819 中定义的 etherStatsOctets。此统计信息计数控制器接收的总字节数,包括错误和丢弃的数据包。
“rx_total_packets” 等同于 RFC 2819 中定义的 etherStatsPkts。此统计信息计数控制器接收的总数据包数,包括错误、丢弃、单播、多播和广播数据包。
“rx_undersize” 等同于 RFC 2819 中定义的 etherStatsUndersizePkts。此统计信息计数接收到的长度小于 64 字节的正确格式数据包的数量。
“rx_oversize” 等同于 RFC 2819 中定义的 etherStatsOversizePkts。此统计信息计数接收到的长度大于 1518 字节的正确格式数据包的数量。
“rx_64_bytes” 等同于 RFC 2819 中定义的 etherStatsPkts64Octets。此统计信息计数接收到的长度为 64 八位字节的数据包总数。
“rx_65_127_bytes” 等同于 RFC 2819 中定义的 etherStatsPkts65to127Octets。此统计信息计数接收到的长度在 65 到 127 八位字节(包括两端)之间的数据包总数。
“rx_128_255_bytes” 等同于 RFC 2819 中定义的 etherStatsPkts128to255Octets。此统计信息是接收到的长度在 128 到 255 八位字节(包括两端)之间的数据包总数。
“rx_256_511_bytes” 等同于 RFC 2819 中定义的 etherStatsPkts256to511Octets。此统计信息是接收到的长度在 256 到 511 八位字节(包括两端)之间的数据包总数。
“rx_512_1023_bytes” 等同于 RFC 2819 中定义的 etherStatsPkts512to1023Octets。此统计信息是接收到的长度在 512 到 1023 八位字节(包括两端)之间的数据包总数。
“rx_1024_1518_bytes” 等同于 RFC 2819 中定义的 etherStatsPkts1024to1518Octets。此统计信息是接收到的长度在 1024 到 1518 八位字节(包括两端)之间的数据包总数。
“rx_gte_1519_bytes” 是一个特定于 Altera TSE 行为的统计信息。此统计信息计数接收到的长度在 1519 和 frm_length 寄存器中配置的最大帧长度之间的正常和错误帧的数量。有关更多详细信息,请参阅 Altera TSE 用户指南。
“rx_jabbers” 等同于 RFC 2819 中定义的 etherStatsJabbers。此统计信息是接收到的长度大于 1518 八位字节,并且具有坏 CRC 且为整数八位字节(CRC 错误)或坏 CRC 且为非整数八位字节(对齐错误)的数据包总数。
“rx_runts” 等同于 RFC 2819 中定义的 etherStatsFragments。此统计信息是接收到的长度小于 64 八位字节,并且具有坏 CRC 且为整数八位字节(CRC 错误)或坏 CRC 且为非整数八位字节(对齐错误)的数据包总数。