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。