Подскажите, кто и какими алгоритмами пользуется, что бы определить сколько устройств подключено к IDE порту. То есть как определить, ситуацию, когда подключен только мастер, только слейв, или оба сразу, или вообще ничего не подключено.
MisHel64 А с чего бы вдруг вопрос? Стандарт читали? А вообще я вам советую исходники линукса смотреть.
MisHel64 Тогда тебе совет. Возьми для полного счастья сидиром и HDD на одном шлейфе. И попробуй с различными комбинациями перемычек. А да и без перемычек. А да и местами их еще по переставлять.
Я пользуюсь методом Кулакова из книги программирование дисковых подсистем. Там по отклику на команды можно понять о наоличии устройства и какое оно. Или в исходниках UniATA есть код проверяющий какие то магические сигнатуры, с ним я не разбирался
Спасибо. 4 часа прошли в пустую. Бред это, а не код. И к поставленной задачи вообще не имеет ни какого отношения. Ты же про LST11_02.inc?
Номер конкретно не помню. А чем он тебе так не угодил? меня в принципе тоже интересует поиск устройств на портах IDE, если что раскопаешь отпиши, будет интересно глянуть
Мне он не угодил, что в принципе не может корректно решить поставленную задачу, без дополнительных тело движений. А дополнительные тело движения, сделают эту реализацию просто не нужной, в контексте решаемой задачи.
MisHel64 Вроде как одной лишь проверкой тут не обойтись. Об этом как раз таки и толкует Pavia (могут во всевозможных ситуациях возвращаться разные статусы, по которым явно не понять с чем имеем дело). Но вот если заглянуть в исходники UniATA, то можно заметить, что проверка на не-IDE устройство реализована практически в каждой функции. Т.е. проверка производится на каждом этапе. Да ещё эта проверка зависит и от способа работы с контроллером.
Извиняюсь за оффтоп, но чтоб темы не плодить. Вот буквально вчера тестил драйвер флопика под свою поделку, потом выводил содержимое на экран. Фишка в том, что данные для отображения находились на другой странице (она present и валидна по привилегиям). В VirtualBox сие со включённым paging'ом покрашилось, ничего не дав в виде отчёта (обработчики исключений выводят инфу о происшествии), а без paging'a всё в порядке. В Bochs всё в полном порядке. Это баг в VirtualBox? Таки странно такие результаты получить.
Igor1024 В корне не правильный подход. Если нет темы подходящей под ваш вопрос, то стоит заводить новую, а не засорять чужую тему вопросами, которые не имеют ни какого отношения, к теме обсуждения.
> Подскажите, кто и какими алгоритмами пользуется, что бы определить сколько устройств подключено к IDE порту. В моей оси примерно так: Сперва конфигурируется AHCI, после чего все подключенные устройства отображается в с специальном регистрах. Далее ищу все IDE, RAID, SATA (если AHCI активно, то подключенных устройств на нем не будет ) контроллеры и опрашиваю их. Отмечу, что логика работы немного отличается от классической IDE, но несложно сделать универсальный драйвер. Кстати если в ресурсах PCI IDE не прописаны BAR'ы (первые 4 дворда, BusMaster должен быть обязательно) значит это стандартный контроллер, работать с ним нужно через стандартные порты 0x1F0, 0x3F6, 0x170, 0x376. Сам алгоритм поиска у меня представляет из себя последовательный опрос устройств на каналах с помощью identify device, тут важно сделать выход по таймауту, потому что некоторые контроллеры не выставляют ошибки в случае неподключенного устройства.
shm Спасибо за множественную информацию, может кому-то полезно будет. А по сути вопроса, есть что сказать?
MisHel64, по сути вопроса я уже сказал. Сперва посылаем Identify Device первому устройству на канале, потом второму, потом переходим к другому каналу. Если при этом произошла ошибка по таймауту или контроллер выставил ошибку, то значит устройства нет. Именно так делается в моей ОС. Хотя в даташите рекомендуется для этих целей использовать специальную команду получения стояния канала (сейчас под рукой даташита нет, поэтому точного названия не скажу) и по ее результатам можно определить подключенные устройства (и неисправные), можешь сам выбирать каким способом ты будешь опрашивать устройства для получения количества подключенных. А теперь поясни, в чем подразумевалась "суть" вопроса, наверное как передать контроллеру команду "Identify Device" и принять сотояние?
Не все так просто, как кажется. Посты NN 3, 6, 8. Не всегда. И не совсем так. А точнее бывает, что совсем не так. Что-то мне такие фразы всегда Банжелось с Альтом напоминают.... Но, это так, лирика. Ну как будет, отпишись, почитаем.... Пост N1 Молодец. Качественно подебколол. Пирожок на полке.
Пока нет. В принципе нужно писать тестер, собирать статистику, что бы понять, где мой алгоритм дает сбой. А пока некогда. Помощи, сам видишь, ждать не приходится.