DM9000 網路驅動

版權所有 2008 Simtec Electronics,

簡介

此檔案描述瞭如何使用基於DM9000平臺裝置的網路驅動,該驅動包含在 drivers/net/dm9000.c 和 drivers/net/dm9000.h 檔案中。

該驅動支援三種DM9000變體:DM9000E(首個支援的晶片)以及更新的DM9000A和DM9000B裝置。目前由Ben Dooks維護和測試,任何與此驅動相關的補丁都應抄送給他。

定義平臺裝置

附加到平臺裝置的最小資源集如下

  1. 地址暫存器的物理地址

  2. 資料暫存器的物理地址

  3. 裝置中斷引腳連線的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輪詢”允許在構建時強制啟用此標誌。

DM9000A / DM9000B

這些晶片功能上與DM9000E相似,並且很容易被同一驅動支援。其特性包括:

  1. 內部PHY狀態變化時觸發中斷。這意味著在使用內部PHY時,這些裝置上的PHY狀態週期性輪詢可能會被停用。

  2. TCP/UDP校驗和解除安裝,目前驅動程式不支援此功能。

ethtool

該驅動支援ethtool介面,用於訪問驅動狀態資訊、PHY狀態和EEPROM。