Определение IDE устройств

Тема в разделе "WASM.OS.DEVEL", создана пользователем MisHel64, 13 май 2011.

  1. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Подскажите, кто и какими алгоритмами пользуется, что бы определить сколько устройств подключено к IDE порту. То есть как определить, ситуацию, когда подключен только мастер, только слейв, или оба сразу, или вообще ничего не подключено.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    MisHel64
    А с чего бы вдруг вопрос? Стандарт читали?

    А вообще я вам советую исходники линукса смотреть.
     
  3. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Естественно читал. Вот тестры багу повесили, сижу, репу чешу.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    MisHel64
    Тогда тебе совет. Возьми для полного счастья сидиром и HDD на одном шлейфе. И попробуй с различными комбинациями перемычек. А да и без перемычек. А да и местами их еще по переставлять.
     
  5. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Я пользуюсь методом Кулакова из книги программирование дисковых подсистем. Там по отклику на команды можно понять о наоличии устройства и какое оно. Или в исходниках UniATA есть код проверяющий какие то магические сигнатуры, с ним я не разбирался
     
  6. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Перерыл сейчас Кулакова, так и не нашел, где он это делает.
     
  7. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    В 11 главе, функция FindHDD
     
  8. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Спасибо. 4 часа прошли в пустую. Бред это, а не код. И к поставленной задачи вообще не имеет ни какого отношения. Ты же про LST11_02.inc?
     
  9. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Номер конкретно не помню. А чем он тебе так не угодил? меня в принципе тоже интересует поиск устройств на портах IDE, если что раскопаешь отпиши, будет интересно глянуть
     
  10. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Мне он не угодил, что в принципе не может корректно решить поставленную задачу, без дополнительных тело движений. А дополнительные тело движения, сделают эту реализацию просто не нужной, в контексте решаемой задачи.
     
  11. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    MisHel64
    Вроде как одной лишь проверкой тут не обойтись. Об этом как раз таки и толкует Pavia (могут во всевозможных ситуациях возвращаться разные статусы, по которым явно не понять с чем имеем дело).
    Но вот если заглянуть в исходники UniATA, то можно заметить, что проверка на не-IDE устройство реализована практически в каждой функции. Т.е. проверка производится на каждом этапе. Да ещё эта проверка зависит и от способа работы с контроллером.
     
  12. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Извиняюсь за оффтоп, но чтоб темы не плодить.
    Вот буквально вчера тестил драйвер флопика под свою поделку, потом выводил содержимое на экран. Фишка в том, что данные для отображения находились на другой странице (она present и валидна по привилегиям).
    В VirtualBox сие со включённым paging'ом покрашилось, ничего не дав в виде отчёта (обработчики исключений выводят инфу о происшествии), а без paging'a всё в порядке.
    В Bochs всё в полном порядке.
    Это баг в VirtualBox? Таки странно такие результаты получить.
     
  13. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Igor1024 В корне не правильный подход.
    Если нет темы подходящей под ваш вопрос, то стоит заводить новую,
    а не засорять чужую тему вопросами, которые не имеют ни какого отношения, к теме обсуждения.
     
  14. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Прошу прощения. Больше так делать не буду. Просьба модераторам удалить мои сообщения из этой темы.
     
  15. shm

    shm New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2010
    Сообщения:
    93
    > Подскажите, кто и какими алгоритмами пользуется, что бы определить сколько устройств подключено к IDE порту.
    В моей оси примерно так:
    Сперва конфигурируется AHCI, после чего все подключенные устройства отображается в с специальном регистрах.
    Далее ищу все IDE, RAID, SATA (если AHCI активно, то подключенных устройств на нем не будет ) контроллеры и опрашиваю их. Отмечу, что логика работы немного отличается от классической IDE, но несложно сделать универсальный драйвер. Кстати если в ресурсах PCI IDE не прописаны BAR'ы (первые 4 дворда, BusMaster должен быть обязательно) значит это стандартный контроллер, работать с ним нужно через стандартные порты 0x1F0, 0x3F6, 0x170, 0x376.
    Сам алгоритм поиска у меня представляет из себя последовательный опрос устройств на каналах с помощью identify device, тут важно сделать выход по таймауту, потому что некоторые контроллеры не выставляют ошибки в случае неподключенного устройства.
     
  16. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    shm Спасибо за множественную информацию, может кому-то полезно будет.
    А по сути вопроса, есть что сказать?
     
  17. shm

    shm New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2010
    Сообщения:
    93
    MisHel64, по сути вопроса я уже сказал. Сперва посылаем Identify Device первому устройству на канале, потом второму, потом переходим к другому каналу. Если при этом произошла ошибка по таймауту или контроллер выставил ошибку, то значит устройства нет. Именно так делается в моей ОС. Хотя в даташите рекомендуется для этих целей использовать специальную команду получения стояния канала (сейчас под рукой даташита нет, поэтому точного названия не скажу) и по ее результатам можно определить подключенные устройства (и неисправные), можешь сам выбирать каким способом ты будешь опрашивать устройства для получения количества подключенных.
    А теперь поясни, в чем подразумевалась "суть" вопроса, наверное как передать контроллеру команду "Identify Device" и принять сотояние?
     
  18. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Не все так просто, как кажется.

    Посты NN 3, 6, 8.

    Не всегда. И не совсем так. А точнее бывает, что совсем не так.

    Что-то мне такие фразы всегда Банжелось с Альтом напоминают.... Но, это так, лирика.

    Ну как будет, отпишись, почитаем....

    Пост N1

    Молодец. Качественно подебколол. Пирожок на полке.
     
  19. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    У меня сейчас появилась та же проблема что и у тебя, никаких вариантов не нашел?
     
  20. MisHel64

    MisHel64 Member

    Публикаций:
    0
    Регистрация:
    9 мар 2011
    Сообщения:
    182
    Пока нет.
    В принципе нужно писать тестер, собирать статистику, что бы понять, где мой алгоритм дает сбой.
    А пока некогда. Помощи, сам видишь, ждать не приходится.