Universal ATA driver for Windows NT4/2000/XP
Keywords: Universal ATA driver, Universal IDE driver, Universal UDMA driver, Universal DMA driver, Windows, universal, ata, driver, dma, BusMaster, NT4, 2000, w2k, XP

Alter.Org.UA
<< Back |  | Home |  | EN |  |  | www/www1/www2
- | ### Universal ATA driver for Windows NT4/2000/XP #### Обновлено 2005.03.24 Download Features Compatibility Install Guide TroubleShooter/FAQ Registry settings Management utility Plans History Versions #### Download Последняя рабочая версия (v 0.31a) Последняя beta версия - v 0.31b #### Features поддержка большого списка IDE controllers, а также любых других ATA/ATAPI совместимых контроллеров. поддержка DMA/UDMA (до ATA-133) на известных контроллерах и базового DMA - на совместимых всей линейки режимов UDMA0-UDMA6 (ATA-16/25/33/44/66/100/133) поддержка Serial ATA поддержка LBA48 (жесткие жиски объемом больше 128Gb) не требует переустановки при смене IDE контроллера или мaтеринской платы внутренняя очередь команд и исполнение в оптимальной последовательности user-mode утилита для управления ATA/ATAPI устройствами. Можно находу менять режим передачи данных (PIO/DMA/UDMA). поддержка NT4, 2000, XP, 2003 (возможно 2005 - не проверено) настройки кеширования, скорости и многого другого в Registry #### Plans Поддержка RAID (mirror, stripping, mirror+stripping) Поддержка NT3.51 Горячая замена IDE устройств в OS младше w2k Поддержка Win 9x/ME PNP (WDM) реализация для w2k и старше #### History Идея написать универсальный ATA драйвер возникла у меня по следующий причинам : вопрос совместимости DMA/UDMA режима (точнее драйвера, сей режим поддерживающего) с разнообразными программами записи на CD-R/RW (см. CD-R/RW & DMA drivers) отсутствие user-level средств для работы с IDE устройствами: переключение/просмотр режимов (PIO, (U)DMA), получение характеристик устройства. отсутствие в NT4 поддержки работы с IDE устройствами, подключенными к одному каналу, в различных режимах (PIO vs (U)DMA). желание реализовать command reordering для повышения производительности (надеюсь все знают, почему SCSI обходит IDE по производительности на многозадачных системах) мысли об организации LBA-based sector cache, (естественно, кешировать блоками хотя бы по 64k) вечные проблема выбора между возможностью загрузки ОС на любой материнской плате и использованием UDMA. Особенно актуально при необходимости поддерживать парк компьютеров с различным железом, но абсолютно одинаковым софтом (пользователи NortonGhost's знают). Особенно актуально стало в w2k, где смена контроллера IDE автоматически ведет к незагружаемости. Кстати, по этому поводу, особенно касательно w2k/XP планируется сделать одно очень существенное изменение. Читать здесь. По дороге возникли еще вот какие мысли и пожелания со стороны пользователей (пока еще не реализовано): Поддержка RAID (mirror, stripping, mirror+stripping) Поддержка NT3.51 Горячая замена IDE устройств в OS младше w2k Обчитавшись спецификаций (винтов, ATAPI и ATA/IDE контроллеров) и сорцов (от NT4 и FreeBSD) я нарисовал версию BusMaster_v8a_ok.rar/tgz (52.1 Kb/60.5 Kb) (v 0.8a), успешно понявшую все доступные мне контроллеры, а именно: VIA 82C586 (ETEQ) на SOYO-5EHM VIA 8233 на Soltek-DRV4 CMD 649 (дополнительный PCI контроллер) А чуть позже и такие: Intel ICH on ~10 different machines Intel ICH2 on Dual-Processor machine ServerWorks CSB5 on Dual-Processor machine AcerLabs Aladdin V (Rev 0xC4) on Notebook Intel PIIX3 VIA 82C686 By design, драйвер инициализирует любое PCI устройство, считающее себя IDE Controller'ом, а также well-known Mass-storage Controllers: good BusMasters: Intel PIIX / PIIX3 / PIIX4 Intel ICH / ICH0 / ICH2 AcerLabs Aladdin ATA / ATA33 VIA ATAxxx SiS 5591 ATA33 CMD 649 ATA100 checked CMD 648 / 646 Cyrix 5530 ATA33 AMD 756 ATA66 ServerWorks ROSB4 ATA33 Promise TX2 ATA33 / ATA66 / ATA100 HighPoint ATAxxx Intel ICH3, PIIX4e nVIDIA nForce/nForce2 AMD 768, 766, 756 ServerWorks CSB5 ATA66/100 Promise TX2 ATA133 Promise Ultra/FastTrak 33/66/100 Promise OEM ATA100 Acard ATPxxxx 33/66/100 Cenatek Rocket Drive Intel ICH4 /ICH5, PIIX4e SiS Family Intel ICH6 National Geode SC1100 IT8xxx buggy controllers: PC Technology RZ 1000 PC Technology 37C922 CMD 640 SiS83C601 Проверить все это многообразие устройств достаточно трудно. Но некоторые матрицы совместимости (к-во проверенных машин) можно посмотреть здесь. Debug Версия 0.31b (rar/tgz) - 111.8 Kb/131.6 Kb. Версия 0.31b (rar/tgz) - 80.1 Kb/96.1 Kb. и исходники 0.31b (rar/tgz) - 166.1 Kb/206.5 Kb. Расширил Registry settings для управления поддерживаемыми устройствами. Теперь можно отдельно включать/выключать поддержку PCI, ISA, ISA/PCI Compat, MCA. Также в отладочных целях добавлена возможность выдачи Debug-сообщений прямо на синий экран В список устройств добавлено HiNT VXPro II. Правда, мы с ним пока еще не работаем :) Note: не устанавливайте Debug версию в Win 2000 и старше без DbgPrint Dump, настроенного следующим образом:
      DbgPrintLog.exe -full -T DTN -wd X:\dir_for_logs -drv 1 -svc A -drvopt DoNotPassMessagesDown 1
          -drvopt StopOnBufferOverflow 1 -drvopt BufferSize 16384 DbgDump.log
- 2005.03.04 Версия 0.31a (rar/tgz) - 80 Kb/96 Kb. и исходники 0.31a (rar/tgz) - 165.9 Kb/206.3 Kb. Нашел и исправил неинициализированую структуру. Это был DEVICE_EXTENSION (в который входят перемынные состояний каналов, подключеных устройств и обработчиков прерываний. На большинстве машин, участвовавших в тестировании там изначально были нули. А вот на некоторых (достоверно известна только одна машинка, за что спасибо Axxie), память была уже чем-то заполнена. Также поступило интересное сообщение от Mike. У него UniATA работает на ICH4 в NT4+sp6a. 2005.03.04 Версия 0.31 (rar/tgz) - 79.6 Kb/95.6 Kb. и исходники 0.31 (rar/tgz) - 165.1 Kb/205.4 Kb. Полностью переписан код по борьбе с ATAPI устройствами, генерирующими INTR не сбрасывая BSY. Thanks to Root за терпение при тестировании :) Исправлена последовательность действий по отправке ATAPI команд. В одном месте не сбрасывался interrupt status, а в другом слишком рано разрешались прерывания. Добавлен сброс interrupt status при сбросе контроллера. На всякий случай. Еще немного расширил Registry settings и исправил ряд глюков 2005.02.20 Debug Версия 0.30i (rar/tgz) - 101.6 Kb/119.8 Kb. Версия 0.30i (rar/tgz) - 79.2 Kb/95.2 Kb. и исходники 0.30i (rar/tgz) - 164.2 Kb/204.5 Kb. Исправлен глюк (тормоза) в сбросе кэша винта при shutdown'е. Влил в .INF еще одно исправление от Root Добавлен экспериментальный код (взято из свежей FreeBSD) для борьбы с ATAPI устройствами, генерирующими INTR не сбрасывая BSY. Thanks to Root Добавлен код для борьбы со следующим глюком SCSIPORT.SYS в NT4: если первая попытка инициализировать Compatible Mode IDE контроллер заканчивается ошибкой при проверке правильности списка запрошеных ресурсов, не сбрасывается флаг, говорящий о том, что этот контроллер уже инициализирован. В результате вторая попытка не проходит, т.к. драйвер видит, что контроллер уже кем-то занят. Thanks to Vitaliy Vorobyov aka deathsoftX@yandex.ru (remove X) за обнаружение и исправление. Расширил и нормально задокументировал Registry settings Снова выложена специальная Debug-версия с включенными логами. 2005.02.08 Debug Версия 0.30h (rar/tgz) - 99.9 Kb/118.2 Kb. Версия 0.30h (rar/tgz) - 78.3 Kb/94.3 Kb. и исходники 0.30h (rar/tgz) - 162.6 Kb/202.7 Kb. Убрал слишком длинное ожидание готовности устройства в случае возникновения ошибки. Сделал сброс кэша винта при shutdown'е. Влил в .INF исправление от Root, может теперь глючить перестанет :) В atactl.exe добавлена возможность reset'а отдельного устройства - ключ -r. Полезно при повисании ATAPI устройств. Также выложен специальная Debug-версия с включенными логами. Note: не устанавливайте эту версию без DbgPrint Dump, настроенного следующим образом:
      DbgPrintLog.exe -full -T DTN -wd X:\dir_for_logs -drv 1 -svc A -drvopt DoNotPassMessagesDown 1
          -drvopt StopOnBufferOverflow 1 DbgDump.log
- 2005.01.30 Версия 0.30g (rar/tgz) - 78.2 Kb/93.8 Kb. и исходники 0.30g (rar/tgz) - 161.5 Kb/201 Kb. Обнаружил и исправил глюк: в некоторых ситуациях драйвер пытался перепрограммировать режим передачи данных одного из устройств на IDE канале, в то время как второе устройство обрабатывало команду. Это также иногда проявлялось при поступлении новой команды в очередь. Выражался глюк очень просто: система висла намертво. На моей машине устойчиво проявлялось только в очень специфических условиях. Но это при том, что на каждом IDE канале висит только одно устройство. При наличии 2х устройств все могло вылазить еще при загрузке ОС. Похоже, что LBA48 уже работает нормально. А вот Intel ICH4 - все еще нет :( 2005.01.16 Версия 0.30e (rar/tgz) - 78.1 Kb/93.8 Kb. и исходники 0.30e (rar/tgz) - 160.9 Kb/200.4 Kb. Еще ряд исправлений в LBA48: забыл установить бит IDE_USE_LBA при использовании LBA48 адресации не было поддержки LBA48 для команды IDE_VERIFY - проверка поверхности не всегда правильно обрабатывался READ_NATIVE_LAST_LBA/SET_MAX_LBA а также полезное дополнение: сделана утилика atactl.exe, позволяющая получать список IDE, SCSI и RAID контроллеров, а также информацию о подключенных к ним устройствах. Если в системе установлен драйвер UniATA, с помощью atactl.exe можно менять режим передачи данных для произвольного IDE/ATAPI устройства (PIO, DMA, UDMA). немного оптимизирован код установки DMA режима для различных контроллеров. В результате удаления дублирующегося кода (см. ф-цию AtaSetTransferMode()) обнаружилось несколько несоответствий режима работы ATA/ATAPI устройства и контроллера. 2005.01.02 Версия 0.30c (rar/tgz) - 69.8 Kb/75.1 Kb. и исходники 0.30c (rar/tgz) - 148.6 Kb/176.8 Kb. Исправил глюк в поддержке LBA48 - т.е. дисков объемом больше 128Gb. Проблема была в коде определения реального размера винта и смены логической геометрии. Некоторые винты после reset'а ограничивают свой размер до 32Gb (например мой Seagate Barracuda IV 40) или до 128Gb (живых примеров не знаю). И есть команды READ_NATIVE_LAST_LBA/SET_MAX_LBA, которыми винт можно перевести в нормальное состояние (полный объем). Плюс для винтов > 128Gb появились их 48-битные братья. А я и не знал :( Получилось, что винт перепрограммировался на 128Gb. Огромное спасибо Александру Спелицину - spelX@mail.ru (remove X) за тестирование на 160Gb винте да еще и со старым контроллером (не знающим об LBA48) - i440BX. Исправил глюк в обработке флага UNIATA_NO_DPC_ATAPI - обход глюка с повисанием CMD-649 при подключении некоторых новых CD/DVD-приводов. 2004.12.27 Версия 0.30a (rar/tgz) - 67.9 Kb/72.5 Kb. и исходники 0.30a (rar/tgz) - 146.4 Kb/173.7 Kb. Уже в который раз переписан код поддержки Intel ICH4. Точнее говоря, я вернул его к тому состоянию, в котором все как будто хорошо работало. Пока ничего не обещаю, посмотрим на результаты тестирования. Пока нет правильной, идеологичной и 100% работы с ScsiPort драйвером, сделан хитрый workaround. А именно - пробуем инициализировать основной Onboard IDE controller 2-мя способами (хаки, о которых я писал раньше и жаловался, что на разных машинах по необяснимым причинам одни работают а другие нет). Пока опыт показывает, что хотя бы 1 из них работает. Опять таки - посмотрим. 2004.12.05 Версия 0.29j (rar/tgz) - 67.6 Kb/72 Kb. и исходники 0.29j (rar/tgz) - 145.5 Kb/172.6 Kb. Багфикс в коде распознавания SiS контроллеров. Там вообще интересный алгоритм опознания. Есть 1 PCI IDE Controller c навечно прибитым гвоздями DeviceId/VendorID. И есть еще всякие Bridge Devices, по наличию которых определяется, что это за IDE Controller. Это так как и у VIA. А вот для еще некоторых моделей есть хитрая проверка: У IDE контроллера меняется 1 байт в PCI Config Space и проверяется, не изменился ли у него DeviceID (!). (Вообще, смена DeviceID на лету - это какой-то бред, но она таки происходит на некоторых SiS'ах и в частности на Mike'овском). Проблема была в том, что при переносе кода я потерял строчку, которая после проверки восстанавливает этот самый байт. Спасибо Mike'у за терпение в тестировании глючных версий и отправку вот таких баг-репортов (181 Kb). Так что пробуем... 2004.09.21 Устранено еще несколько ошибок в коде для Intel, Acer и еще каких-то контроллеров. Довольно глупый баг оказался: поставил break в switch/case вместо return. В результате, после успешного перевода контроллера в UDMA режим, вызывался default код для переключения устройства (не контроллера!) в PIO-0. Улучшена поддержка SiS контроллеров. за что большое спасибо Ivano Guerra. И конечно же, все это предстоит еще проверить на практике. Предлагается на пробу Версия 0.29i3 (rar/tgz) - 67.6 Kb/72 Kb. и исходники 0.29i3 (rar/tgz) - 144.9 Kb/171.9 Kb. 2004.09.08 Все в том-же коде поддержки Intel'овских контроллеров ICHxxx найден еще баг. Похоже что по моему недосмотру. Приводит к повреждению данных на диске. Так что выход v29i отменяется до устранения. 2004.08.26 Версия 0.29i (rar/tgz) - 144.4 Kb/171.2 Kb. В коде поддержки Intel'овских контроллеров найден баг. Баг этот был скопирован из FBSD 5.2.1 (и все еще там присутствует). Я внимательно сравнил с очень старой версией и обнаружл, что в 16-битный регистр (PCI Config Space 0x54) записывается 32-битное значение (0x10000 << devno). Старшие быти теряются, а младшие - все 0. Это приводит к выходу контроллера из UDMA режима. А устройства-то уже перепрограммированы. Вот и получается несоответствие режимов, и как следствие - повисания или crash'и. Надеюсь, все это счастье теперь будет работать. 2004.08.25 Версия 0.29h (rar/tgz) - 66.9 Kb/71.4 Kb. и исходники 0.29h (rar/tgz) - 143.6 Kb/170.3 Kb. Переписан код поддержки Intel'овских контроллеров. Надеюсь, то что работало раньше работать не перестанет, а ICH4 - наконец-то заведется. Перетянута поддержка еще целого ряда контроллеров из FBSD 5.2.1. Исправил глюк в device include/exclude registry settings. Сделана поддержка simplex-mode. Это когда IDE каналы работают поочереди. Для некоторых контроллеров этот режим просто необходим. Помимо автоопределения, simplex-mode может быть включен при помощи значения Registry DWORD:ForceSimplex в ключе HKLM\System\CurrentControlSet\Services\UniATA\Parameters или в подключе, специфичном для данного контроллера. Сделана поддержка IDE устройств, отдающих в неактивном состоянии статус 0x40 (IDE_STATUS_DRDY) вместо привычных 0x50 (IDE_STATUS_IDLE). Такое нблюдалось в последней версии VMWare (4.5.1 build-7568). Спасибо Виталию за информацию и тестирование. Переписан код балансировки загрузки IDE каналов (в simplex-mode) и устройств, подключенных к одному канало. 2004.08.01 Версия 0.29d (rar/tgz) - 62.4 Kb/66 Kb. и исходники 0.29d (rar/tgz) - 135.9 Kb/160.1 Kb. Наконец-то разобрался, что за проблемы были при подключении некоторых новых CD/DVD-приводов к контроллерам CMD-64x. Висла винда при загрузке (и с моими дровами и XP с MS'овскими). Те же самые CD замечательно работали на onboard VIA IDE. Стал разбираться - оказалось виноват код, делающий Reset контроллера после опроса устройств. После этого (возможно еще из-за того, что DVD стоял slave, а драйвер перед окончанием инициализации принудительно выбирал master). Убрал - все зажужжало. Этот глючный код был взят из стандартного atapi драйвера еще от NT4, и по всей видимости MS его не меняла в новых виндах. Проверил под XP. Работает, но PNP (и как следствие hibernate) с UniATA пока несовместимы. В w2k - то же самое. Буду разбираться. 2004.06.05 Версия 0.29c (rar/tgz) - 61.6 Kb/65.2 Kb. и исходники 0.29c (rar/tgz) - 133.9 Kb/157.9 Kb. Исправлен код для работы с VIA 8235 и VIA 8233A. На сей шаг меня сподвигли дивные глюки, наблюдавшиеся на машинке VIA 8235. Тормозит, и работает с переменным успехом (данные то читаются, то нет). Посмотрел последнюю версию ATA дров от FBSD. Там никаких особенностей для этого контроллера. Зато в форумах стоит ругань на глюки с UDMA на VIA 8235. Посмотрел в Linux'е и уведел, что именно для VIA 8235 и VIA 8233A не перепрограммируется регистр PCI 0x4с. Я сделал точно также. Жалко только, что проверить пока не могу. Еще при пересмотре кода увидел, что как-то неправильно (не так, как в FBSD'шном) оригинале вычислялся номер регистра для установки режима на Secondary channel в SiS'ах. Тоже поправил. 2004.06.02 Версия 0.29a (rar/tgz) - 61.1 Kb/64.7 Kb. и исходники 0.29a (rar/tgz) - 133.5 Kb/157.5 Kb. Добавлена поддержка кучи новых контроллеров. Особенно это коснулось SiS и Promise. Сделаны device/vendor-specific настройки в Registry. В ключе HKLM\System\CurrentControlSet\Services\UniATA можно создавать следующую иерархию ключей с настройками. Paramaters - наиболее глобальные настройки. Paramaters\Ven_VVVV - где VVVV - код производителя (см. PCI Dump) Paramaters\Ven_VVVV\Dev_DDDD, DDDD - код устройства. См. туда же. Paramaters\Ven_VVVV\Dev_DDDD\Slot_XXXXXXXX, XXXXXXXX - адрес на шине PCI. По хорошему. нужно было бы сделать удобный кофигуратор... Сделаны Include/Exclude опции. Теперь можно создать DWORD значение с именем Include или Exclude в указанных выше ключах для включения/выключения UniATA на определенных контроллерах. 2004.04.08 Версия 0.29b (rar/tgz) - 61.5 Kb/65.1 Kb. и исходники 0.29b (rar/tgz) - 133.8 Kb/157.8 Kb. Поправил файлики OEMSETUP.INF и TXTSETUP.OEM. Успешно добавил UniATA во время установки w2k и поставил ее на винт, подключеный к CMD649 IDE контроллеру. Надо сказать, что w2k сама по себе об этом контроллере ничего не знает. Из этого я сделал вывод, что теперь эти файлы правильные. Enjoy. 2004.05.19 Версия 0.28 (rar/tgz) - 58.3 Kb/61.8 Kb. и исходники 0.28 (rar/tgz) - 127.2 Kb/149.1 Kb. Исправлен код включения/выключения прерываний (раньше работал только для Primary канала). Наконец-то окончательно убрана зависимость поддержки DMA от системного ScsiPort драйвера. Теперь UniATA самостоятельно транслирует виртуальные адреса в физические (что необходимо для работы DMA). За счет этого во первых ушла потребность в использховании хакерских методов при инициализации (приходилось прикидываться PCI устройством, имея на самом деле ISA интерфейс). А во вторых, ушло копирование данных между DMA буфером и пользовательским. 2004.02.24 Версия 0.27a (rar/tgz) - 58.2 Kb/61.9 Kb. и исходники 0.27a (rar/tgz) - 124.7 Kb/147.6 Kb. Исправлен код обработки ошибок для ATAPI устройств (CD-ROM/RW, etc.). На некоторых устройствах после получения ошибки необходимо дождаться установки бита DRQ в регистре статуса. 2004.01.20 Версия 0.27 (rar/tgz) - 58.3 Kb/61.8 Kb. и исходники 0.27 (rar/tgz) - 125.5 Kb/147.1 Kb. Thanks to Vitaliy Vorobyov aka deathsoftX@yandex.ru (remove X). Исправлен код инициализации для NT4+SP6a Thanks to Vitaliy Vorobyov again, за переписывание INF. файла для NT4. Код, использующий задержки, вынесен из обработчика прерываний (ISR) в отдельный поток (DPC). 2004.01.16 Версия 0.26c (rar/tgz) - 55.8 Kb/59 Kb. и исходники 0.26c (rar/tgz) - 120.7 Kb/141.4 Kb. Исправил код обработки ошибок передачи данных в DMA режиме. Предыдущие версии вешались наглухо в такой ситуации. Как показал эксперимент, проблема состояла в том, что после ошибки необходимо дождаться сигнала готовности от HDD перед повторным исполнение команды. Отдельное спасибо Alex Y. Matiash за сообщение об ошибке. Исправил код обработки прерывания для CMD 649 и CMD 648 контроллеров 2003.12.26 Версия 0.26 (rar/tgz) - 55.7 Kb/59 Kb. и исходники 0.26 (rar/tgz) - 119.3 Kb/140 Kb. Отключил поддержку Promise и HighPoint RAID по умолчанию, так как RAID мы пока не умеем. Оставил возможность работать с этими контроллерами как с обычными 2-канальными ATA контроллерами. Включаетс ключиком
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UniATA\Parameters]
      "SkipRaids"=dword:00000000
Добавил в дистрибутив утилитку для пересборки .INF-файла для w2k, которая сканирует PCI устройства и добавляет в список совместимые, но не вошедшие в список (на момент сборки драйвера) IDE контроллеры. 2003.09.23 Версия 0.26b (rar/tgz) - 55.8 Kb/59 Kb. и исходники 0.26b (rar/tgz) - 120.6 Kb/141.2 Kb. Исправил глюк при работе DMA на некоторых видах CD-ROM'ов. 2003.11.08 Версия 0.25f (rar/tgz) - 36.9 Kb/38.6 Kb. и исходники 0.25f (rar/tgz) - 100.6 Kb/119.1 Kb. В процессе прикручивания поддержки w2k обнаружил, что даже довольно старые версии работают в этой самой w2k. Но к сожалению только с дополнительными контроллерами. Сейчас думаю, как бы обмануть стандартный для w2k/XP IDE miniport, чтобы он не пыталься работать с onboard (Native Mode) IDE. 2003.09.12 Версия 0.25e (rar/tgz) - 164.3 Kb/200.1 Kb. Исправлена бага, из-за которой под w2k не работал второй канал onboard контроллеров. Проблема состояла в том, что NT4 позволяла в процессе инициализации обходными путями зарегистрировать 2 PCI устройства, имеющих одинаковые адреса на PCI шине, но использующих разные системные ресурсы (порты ввода/выводи и прерывания). В w2k такой фокус не работает, поэтому там создается одно устройство, использующее два прерывания. Добавил поддержку для AdapterControl - включение/выключение контроллера прерываний по желанию операционной системы (w2k и старше). Тестирование показало, что функциональность PnP под w2k пока не работает. Основная трудность - для поддержки PnP необходимо создать в Registry и установочном .INF файле список поддерживаемых устройств. Это плохо сочетается с универсальностью. Возможно будут сделаны утилиты, создающие/ пополняющие .INF файл и/или записи в Registry на основе результатов опроса PCI шины. Возможно также придется создать 2 сервиса, использующие один uniata.sys, но в разных режимах: - один в PnP для фиксированного (с точки зрения операционки) списка устройств - второй в Legacy режиме, который будет подхватывать все остальные контроллеры 2003.09.01 Версия 0.25a (rar/tgz) - 157.5 Kb/192.6 Kb. Оказалось, что работать с onboard контроллерами мешал PciIde.sys, который как раз такими контроллерами и занимается. Поэтому я сделал простенький BAT-файл, который копирует UniATA.sys, создает необходимые ключи в Registry и отключает загрузку PciIde. Теперь работает и в w2k !!! Навел порядок в readme файлах. Они теперь есть для w2k (readme_w2k.txt) и NT4 (readme_nt4.txt), плюс сохранена старая версия (readme_nt4_old.txt). Все это переехало в каталоги XXX_Dist. 2003.08.24 В процессе прикручивания поддержки w2k обнаружил, что даже довольно старые версии работают в этой самой w2k. Но к сожалению только с дополнительными контроллерами. Сейчас думаю, как бы обмануть стандартный для w2k/XP IDE miniport, чтобы он не пыталься работать с onboard (Native Mode) IDE. 2003.07.12 Версия 0.25 (rar/tgz) - 155.2 Kb/187.5 Kb. Добавлена поддержка Acard и nForce2 IDE контроллеров. Исправлены неточности в коде поддержки DMA для Promise IDE. Сделана проверка использования DMA перед обращением к регистрам контроллера. 2003.06.03 Версия 0.24 (rar/tgz) - 153.1 Kb/185.2 Kb. Отключена поддержка DMA для ATAPI устройств на контроллерах ServerWorks. Не работает :( Исправлена бага с попыткой использованя SET_GEOMETRY на оччень старых винтах Нормально отрабатывается ситуация с поддержкой DWordIO (32bit) на тех же оччень старых винтах. Утверждают, что умеют. Обманывают... Пробовал под w2k. Не работает. 2003.02.15 Версия 0.23e (rar/tgz) - 152.8 Kb/184.9 Kb. Добавлен код для правильной работы с некоторыми устройствами (Yamaha-CRW2100), имеющими привычку генерировать Unexpected Interrupt в процессе инициализации (несколько позже, чем можно было предположить). 2002.11.25 Версия 0.23d (rar/tgz) - 152.8 Kb/184.9 Kb. Исправлена бага в .INF файле .INF файлы вместе с uniata.sys уехали в Debug_Dist и Release_Dist директории в idedma.mak добавлен новый target PKG c параметром VER. Например текущая версия вместе с дистрибутивами собиралась так: nmake PKG VER="23d_ok" сделана новая инструкция по инсталяции (внутри архива). 2002.11.14 Версия 0.23c (rar/tgz) - 155.4 Kb/188.9 Kb. Исправлена жирная бага, способная ронять машину при исполнении DSC-restrictive commands (Таких как SEEK, PLAY_CD, immediate LOAD/UNLOAD, etc.). Обнаружилась при попытке послушать Audio-CD. Эта же бага могла приводить к неработоспособности сдвоенных контроллеров. (Это когда несколько IDE каналов видятся через одно PCI устройство). .INF файлы уехали в Debug и Release директории для инсталляции соответствующего build'а 2002.11.04 Версия 0.23 (rar/tgz) - 147.3 Kb/176.6 Kb. Только брать ее не надо, она глючная ;). Есть 0.23b BusMaster_v23b_ok.rar/tgz (148.9 Kb/198.7 Kb) , которая хорошая, но я ее еще не принес... Уже принес!!! Вот она - BusMaster_v23b_ok.rar Оптимизирован по размеру код инициализации большинства контроллеров. Сделаны независимые очереди команд для Master и Slave устройств. Теперь command reordering осуществляется для каждого конкретного устройства более эффективно. Очередь, из которой выбирается следующая команда определяется по отдельному алгоритму. Пока учитывается только размер очереди, но в ближайшее время я планирую сделать нечто более умное. Сделан инсталяционный .INF файл (лежит в директории Dist) 2002.10.11(29) Версия 0.22b (rar/tgz) - 146.1 Kb/173.5 Kb. Немного менее глюкавая Исправлен код инициализации VIA-compatible chipsets. Теперь нормально отрабатывается вариант неизвестной версии (Revision Id) контроллера. Исправлен код инициализации некоторых указателей при поиске контроллеров. Иногда они оказывались NULL'ами... Написан человеческий механизм уменьшения скорости передачи при высоком CRC Error-rate. Теперь не падаем сразу в PIO, а плавно снижаем скорость. Если обнаруживается, что ошибок намного меньше в каком-то определенном режиме, устройство окончательно переводится в этот режим и не поднимается выше. Это решает trouble с использованием 40-проводникового кабеля вместо 80 для устройств, понимающих UDMA66+, но не устанавливающих бит, соответствующий типу кабеля в IDENTIFY_INFORMATION. 2002.10.10 Опять Ура! Получилась новая версия BusMaster_v21d_ok.rar/tgz (87.8 Kb/108.2 Kb) (v 0.21d). Буду очень признателен всем, кто возьмет потестить и расскажет, где оно работает, а где не очень (у меня дома - работает. В качестве единственного драйвера для onboard и additional PCI IDE контроллеров. Вместо atapi.sys и прочего). Добавлено DMA/UDMA для ATAPI устройств. Очень поменялась идеология работы с контроллерами, предоставляющими достум к обоим каналам через 1 PCI устройство. При проектировании NT в идеологию не была заложена возможность параллельной работы 2х каналов на 1 устройстве. Пришлось пользоваться обходными путями (Создавать дополнительный DeviceObject, который бы во время обслужавания одного канала ловил прерывания от другого и складывал их в очередь). Сделана сортировка запросов при помещении в очередь. Теперь быстрее работает сканирование больших деревьев директорий, даже при параллельном доступе (6.00 минут -> 5.30). Пробовал мерять для простого копирования - результаты неустойчивые при более-менее одинаковых условиях. Буду еще эксперементировать с методом сортировки. 2002.09.16 Ура! Получилась работающая версия BusMaster_v13b_ok.rar/tgz (97.4 Kb/112.6 Kb) (v 0.13b). умеющая DMA. Собственно запущен DMA engine !!! Поправлен механизм инициализации Primary/Secondary на одном контроллере. Добавлена поддержка Generic DMA (Single Word DMA, mode 0) на случай, если другое режимы не инициализируются (например на неизвестном типе контроллера). Согласно спецификации, BusMaster должен автоматически переводиться в этот режим после включения питания или reset'а. Уменьшено с 5 до 0.05 секунд время ожидания ответа от устройства в обработчике прерывания. Это очень неправильно - блокировать прерывания / переключение thread'ов при повисшем устройстве. Особенно учитывая тот факт, что без этого можно (и даже, согласно рекомендациям Microsoft, нужно) обходиться. 2002.06.25 Версия 0.9 (rar/tgz) - 54.1 Kb/62.1 Kb. Сделан идеологически правильный алгоритм поиска и инициализации устройств. Исправлены баги с инициализацией MasterIde controller (это тот, что onboard и обычно работает через ISA-to-PCI bridge). Как оказалось, работать с этим счастьем через PCI шину нельзя. Контроллер виден, но IRQ и IO-range для него не выделены (подозреваю, что сделано для какой-то совместимости). Вместо этого следует пользоваться стандартными IRQ/IO-rangres: Primary channel - IRQ 14 / IO 0x1f0 Secondary channel - IRQ 15 / IO 0x170 2002.06.01 По дороге обнаружил интересную вещь: некоторые винты (в частности мой Seagate Barracuda ATA 4) by default занижают свой размер до 32Gb, что требует использования специальных команд для правильного определения размера (см. спецификации, keyword="READ/SET NATIVE MAX LBA") 2002.05.28 Предложения и исправления слать на alterX@alter.org.ua (remove X) |
<< Back |  | Автор: Alter (Александр А. Телятников) |  | Сервер: Apache+PHP под FBSD |  | © 2002–2005