DM9000 网络驱动程序

Copyright 2008 Simtec Electronics,

简介

本文档描述了如何使用包含在文件 drivers/net/dm9000.c 和 drivers/net/dm9000.h 中的基于 DM9000 平台设备的网络驱动程序。

该驱动程序支持三种 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 触发标志的设置,如果不存在,这将生成警告。标志字段中的触发将传递给 request_irq() 在注册 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。