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 且為非整數八位位元組(對齊錯誤)的資料包總數。