Задать вопрос

AHCI: Проблема распознавания SATA-накопителей?

Уже почти неделю не могу написать вменяемый код для распознавания драйвов. Пользуясь руководством wiki.osdev.org/AHCI, предпринимаю следующие шаги:


1. Нахожу AHCI HBA как PCI устройство

2. Читаю его BAR5 и получаю адрес регистров контроллера

3. Проверяю GHC.HR (hardware reset bit), нужно чтобы был 0, иначе контроллер in hung or locked state

4. Для каждого установленного бита в PI (ports implemented) проверяю DET, IPM и SIG


Этот подход работает в старом KVM/QEMU и VirtualBox. Но в Parallels Desktop 6 имея GHC.HR=0 для всех реализованных портов DET=0 и SIG=0xFFFFFFFF, при том, что один диск подключен и распознаётся Linux-ом. Кроме того, в новых KVM/QEMU, а также на реальном железе (HP Compaq 8200) GHC.HR=1, ну и та же ситуация с портами (опять же, драйв точно установлен).


Вывести контроллер из GHC.HR=1 ручной установкой единицы (по спецификации максимум через секунду должен обнулиться) не получается. Контроллер находится в power state D0, биты PCI CMD.MSE и CMD.BME установлены. Так что понятия не имею, что тут нужно сделать, чтобы контроллер завёлся.


Может кто-то имел опыт написания AHCI-драйверов, ну или хорошо знаком с такого рода кодом? Заранее спасибо.
  • Вопрос задан
  • 5210 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Проверьте состояние GHC.AE.
В qemu можно включить DEBUG_AHCI в файле hw/ide/ahci.c, он при этом будет дампить в stderr всё что происходит с устройством.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы