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。