DM9000 網路驅動¶
版權所有 2008 Simtec Electronics,
Ben Dooks <ben@simtec.co.uk> <ben-linux@fluff.org>
簡介¶
此檔案描述瞭如何使用基於DM9000平臺裝置的網路驅動,該驅動包含在 drivers/net/dm9000.c 和 drivers/net/dm9000.h 檔案中。
該驅動支援三種DM9000變體:DM9000E(首個支援的晶片)以及更新的DM9000A和DM9000B裝置。目前由Ben Dooks維護和測試,任何與此驅動相關的補丁都應抄送給他。
定義平臺裝置¶
附加到平臺裝置的最小資源集如下
地址暫存器的物理地址
資料暫存器的物理地址
裝置中斷引腳連線的IRQ線路。
這些資源應按此順序指定,因為兩個地址區域的順序很重要(驅動程式期望它們是地址在前,資料在後)。
一個來自 arch/arm/mach-s3c/mach-bast.c 的示例如下
static struct resource bast_dm9k_resource[] = {
[0] = {
.start = S3C2410_CS5 + BAST_PA_DM9000,
.end = S3C2410_CS5 + BAST_PA_DM9000 + 3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40,
.end = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_DM9000,
.end = IRQ_DM9000,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
}
};
static struct platform_device bast_device_dm9k = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
.resource = bast_dm9k_resource,
};
請注意 bast_dm9k_resource[2].flags 中 IRQ 觸發標誌的設定,如果缺少此標誌,將生成警告。flags 欄位中的觸發器將在註冊 IRQ 處理程式時傳遞給 request_irq(),以確保 IRQ 正確設定。
這展示了一個典型的平臺裝置,沒有提供可選的配置平臺數據。下一個示例使用相同的資源,但添加了可選的平臺數據以傳遞額外的配置資料
static struct dm9000_plat_data bast_dm9k_platdata = {
.flags = DM9000_PLATF_16BITONLY,
};
static struct platform_device bast_device_dm9k = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
.resource = bast_dm9k_resource,
.dev = {
.platform_data = &bast_dm9k_platdata,
}
};
平臺數據在 include/linux/dm9000.h 中定義,並將在下面描述。
平臺數據¶
DM9000 的額外平臺數據可以描述到裝置的IO匯流排寬度、裝置是否連線了外部PHY以及是否存在外部配置EEPROM。
平臺數據 .flags 欄位的標誌如下
DM9000_PLATF_8BITONLY
IO操作應使用8位模式。
DM9000_PLATF_16BITONLY
IO操作應使用16位模式。
DM9000_PLATF_32BITONLY
IO操作應使用32位模式。
DM9000_PLATF_EXT_PHY
該晶片連線到外部PHY。
DM9000_PLATF_NO_EEPROM
這可以用來表示板卡沒有EEPROM,或者EEPROM應向用戶隱藏。
DM9000_PLATF_SIMPLE_PHY
切換到使用更簡單的PHY輪詢方法,該方法不會定期嘗試讀取MII PHY狀態。此方法僅在使用內部PHY時可用。有關更多資訊,請參閱連結狀態輪詢部分。
配置符號 DM9000_FORCE_SIMPLE_PHY_POLL,Kconfig 條目“強制基於NSR的簡單PHY輪詢”允許在構建時強制啟用此標誌。
PHY連結狀態輪詢¶
驅動程式跟蹤連結狀態,並向網路核心報告連結(載波)可用性。這透過多種方法管理,具體取決於晶片版本和正在使用的PHY。
對於內部PHY,原始(也是當前預設)方法是讀取MII狀態,要麼在晶片具有必要中斷支援時狀態發生變化時讀取,要麼透過週期性定時器每兩秒讀取一次。
為減少內部PHY的開銷,現在可以選擇使用DM9000_FORCE_SIMPLE_PHY_POLL配置或DM9000_PLATF_SIMPLE_PHY平臺數據選項來讀取摘要資訊,而無需昂貴的MII訪問。此方法更快,但不會列印那麼多資訊。
當使用外部PHY時,驅動程式目前必須輪詢MII連結狀態,因為沒有在連結狀態變化時獲取中斷的方法。
DM9000A / DM9000B¶
這些晶片功能上與DM9000E相似,並且很容易被同一驅動支援。其特性包括:
內部PHY狀態變化時觸發中斷。這意味著在使用內部PHY時,這些裝置上的PHY狀態週期性輪詢可能會被停用。
TCP/UDP校驗和解除安裝,目前驅動程式不支援此功能。
ethtool¶
該驅動支援ethtool介面,用於訪問驅動狀態資訊、PHY狀態和EEPROM。