Кто-нибудь может объяснить, где я могу найти начало этой карты адресов регистров контроллера IDE в памяти? - PullRequest
0 голосов
/ 22 апреля 2009

Я изучал документацию в рамках моего четвертьпроектного проекта по разработке простого драйвера диска. В данный момент я пытаюсь отобразить различные регистры контроллера atapi и IDE, реализованные в контроллере ввода-вывода Intel 82801EB.

Прежде всего, документ, на который я ссылаюсь: www.intel.com/assets/pdf/datasheet/252516.pdf

На странице 415 в таблице 154 показаны смещения различных регистров конфигурации. Это может показаться глупым вопросом, но как мне найти, где они смещены от ? Я ожидал найти какой-то фиксированный базовый адрес, зарезервированный для этих регистров. Оттуда я смогу использовать эту таблицу для сборки моего драйвера.

Например, в таблице 154 регистр команд PCI расположен со смещением 04-05h. Реестр подробно описан на странице 417, что, я полагаю, я понимаю. Однако, где находится базовый адрес, из которого этот регистр расположен в 4 байтах?

Обновление: Теперь, оглядываясь на фиксированную карту ввода-вывода для платы D865PERL, которую мы используем, он говорит, что 0000-00ffh зарезервирован B865PERL и ссылается на таблицу данных ICH5 для получения информации о динамической адресации. Который, я полагаю, может быть использован для регистра контроллера IDE из таблицы 154, которую я упоминал выше. В этот момент я написал своему профессору по электронной почте, но все еще пытаюсь выяснить, где они находятся.

Спасибо за внимание!

Ответы [ 2 ]

1 голос
/ 22 апреля 2009

Ваш 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 бит, используйте "unsigned short".

А если это 32-разрядная версия, используйте "unsigned int".

0 голосов
/ 16 мая 2009

Оказывается, мне никогда не приходилось находить фактический адрес, но номер шины / устройства / функции контроллера IDE.

  1. перечисление всех возможных комбинаций шины PCI / устройства / функции в поисках поставщика и идентификатора устройства контроллера IDE
  2. когда найден, просто напишите порт CONFIG_ADDRESS и прочитайте информацию обратно из CONFIG_DATA

Как правило, когда у вас есть шина, устройство и функция (вместе со смещением регистра), вы можете записать эту информацию в регистр PCI CONFIG_ADDRESS (cf8h) и прочитать содержимое регистра из CONFIG_DATA (cfch).

...