0

作为我为期四分之一的项目的一部分,我一直在翻阅文档以开发一个简单的磁盘驱动程序。目前我正在尝试绘制英特尔 82801EB IO 控制器内部实现的各种 atapi 和 IDE 控制器寄存器。

首先,我指的文件:www.intel.com/assets/pdf/datasheet/252516.pdf

在第 415 页,表 154 显示了各种配置寄存器的偏移量。这似乎是一个愚蠢的问题,但是我如何找到它们的偏移?我期待找到为这些寄存器保留的某种固定基址。从那里我将能够使用此表构建我的驱动程序。

例如,在表 154 上,PCI 命令寄存器位于偏移量 04-05h。登记册在第 417 页上有详细说明,我相信我已经理解了。但是,该寄存器位于 4 个字节的基地址在哪里?

更新:现在,在查看我们正在使用的 D865PERL 板的固定 IO 映射后,它说 0000-00ffh 由 B865PERL 保留,请参阅 ICH5 数据表以获取动态寻址信息。我相信它可以用于我上面提到的表 154 中的 IDE 控制器寄存器。在这一点上,我给我的教授发了电子邮件,但我仍在试图弄清楚这些在哪里。

感谢您的关注!

4

2 回答 2

1

您的 82801EB 将映射到硬件中的某个地址空间。这将特定于您的硬件,因此您需要从硬件手册中找到起始地址。

Step-1: Get IEB_START_ADDRESS from you manual
For each of the registers in the IDE controller
Step-2: Add offset to IEB_START_ADDRESS (For example, if you want offset 04)
You will have to do dereference the address something like (*(IEB_START_ADDRESS + 4))

现在,请注意寄存器大小。

如果是 16 位,请使用“无符号短”。

如果它是 32 位,则使用“unsigned int”。

于 2009-04-22T01:35:18.473 回答
0

原来我不必找到实际地址,而是 IDE 控制器的总线/设备/功能编号。

  1. 枚举所有可能的 PCI 总线/设备/功能组合,搜索 IDE 控制器的供应商和设备 ID
  2. 一旦找到,只需写入 CONFIG_ADDRESS 端口,然后从 CONFIG_DATA 读取信息

基本上,一旦有了总线、设备和功能(以及寄存器偏移量),您就可以将该信息写入 PCI CONFIG_ADDRESS 寄存器 (cf8h) 并从 CONFIG_DATA (cfch) 读取寄存器内容。

于 2009-05-16T04:49:49.967 回答