Alter.Org.UA
 << Back Home EN en   Donate Donate

Universal ATA driver for Windows NT3.51/NT4/2000/XP/2003/Vista/7/ReactOS
With PATA/SATA/AHCI support

Обновлено 2019.04.03

Download

Предыдущая рабочая версия - v 0.46d8
Текущая версия - v 0.47a

Overview

Зачем и кому нужен такой драйвер ? Рассказываю: UniATA имеет смысл поставить, если к новой материнской плате не прилагаются драйвера для вашей старой операционки. Или наоборот - есть старая плата, на которую нужно водрузить новую винду. Конечно, есть стандартные встроенные драйвера, которые наверняка это железо опознают и будут с ним работать. Но как... В PIO режиме, т.е. 0.5-3 Мб/сек. А UniATA будет работать в DMA или UltraDMA режиме, что существенно (иногда даже в 10 раз) быстрее. А вот еще одна проблема - новые винты объемом больше 128 Гб (LBA-48 или BigLba). В старых операционках их поддержка не предусмотрена вообще, а новые требуют последних Service Pack'ов. Поддержка таких винтов в UniATA встроена. И наконец - ситуация смены материнской платы. Обычно это нетривиальная задача. Если просто сделать замену, драйвера от предыдущей платы не опознают новый IDE контроллер и система не загрузится. Придется возвращать плату назад, принудительно менять драйвера на стандартные, снова менять плату и устанавливать новые. О том, чтобы ходить со своим загрузочным винчестеров к друзьям в гости (или на работу) можно забыть (либо довольствоваться скоростью 0.5-3 Мб/сек). Поскольку UniATA поддерживает большой список контроллеров и в дополнение к списку понимает почти любые стандартные (обычные onboard primary/secondary), такая проблема тоже оказывается решенной. UniATA также понимает новые SATA и AHCI контроллеры. Ниже можно почитать более подробный (и более технический) список полезностей.

Features

  • поддержка DMA/UDMA (до ATA-133) на известных контроллерах и базового DMA - на совместимых
  • поддержка жестких дисков объемом больше 128Gb (LBA-48, EnableBigLba)
  • поддержка жестких дисков объемом больше 2Tb (SCSI READ16, WRITE16)
  • поддержка SerialATA (SATA, SATA-2, SATA-3)
  • поддержка NT3.51 (i386+ CPU), NT4, 2000, XP, 2003, 2005, Vista, 7, ReactOS (x86/i386)
  • поддержка SMP/HT
  • поддержка AHCI rev. 0.95 - 1.30
  • поддержка большого списка IDE controllers, а также любых других ATA/ATAPI совместимых контроллеров.
  • вся линейка режимов: UDMA0-UDMA6 (ATA-16/25/33/44/66/100/133)
  • не требует переустановки при смене IDE контроллера или мaтеринской платы
  • внутренняя очередь команд и исполнение операций чтения/записи в более оптимальной последовательности
  • user-mode утилита atactl для управления ATA/ATAPI устройствами. Можно находу менять режим передачи данных (PIO/DMA/UDMA).
  • настройки кеширования, скорости и многого другого в Registry
  • список плохих/ненадежных блоков, чтобы драйвер не мучал диск, а сразу возвращал ошибку (Nikolai Vorontsov).
  • NEW поддержка SCT Command Transport (используется smartmontools)
  • Горячая замена IDE устройств в OS младше w2k (Mike)

Plans

  • Человеческий инсталятор
  • Поддержка RAID (mirror, stripping, mirror+stripping)
  • PNP (WDM) реализация для w2k и старше
  • Поддержка 64-битных версий Windows
  • Поддержка RAID (mirror, stripping, mirror+stripping)
  • Поддержка Win 9x/ME (есть уже частично работающая сборка, спасибо Xeno)
  • работа с BIOS INT13 (Alexei Chipovalov)
  • эмуляция MODE SENSE/MODE SELECT на IDE устройствах (винтах) для управления кешированием, спящим режимом и т.п. (уже в разработке)
  • поддержка древних MFM жестких дисков (KtP)

History

Идея написать универсальный ATA драйвер возникла у меня по следующий причинам :
  1. вопрос совместимости DMA/UDMA режима (точнее драйвера, сей режим поддерживающего) с разнообразными программами записи на CD-R/RW (see CD-R/RW & DMA drivers)
  2. отсутствие user-level средств для работы с IDE устройствами: переключение/просмотр режимов (PIO, (U)DMA), получение характеристик устройства.
  3. отсутствие в NT4 поддержки работы с IDE устройствами, подключенными к одному каналу, в различных режимах (PIO vs (U)DMA).
  4. желание реализовать command reordering для повышения производительности (надеюсь все знают, почему SCSI обходит IDE по производительности на многозадачных системах)
  5. мысли об организации LBA-based sector cache, (естественно, кешировать блоками хотя бы по 64k)
  6. вечные проблема выбора между возможностью загрузки ОС на любой материнской плате и использованием UDMA. Особенно актуально при необходимости поддерживать парк компьютеров с различным железом, но абсолютно одинаковым софтом (пользователи NortonGhost's знают). Особенно актуально стало в w2k, где смена контроллера IDE автоматически ведет к незагружаемости. Кстати, по этому поводу, особенно касательно w2k/XP планируется сделать одно очень существенное изменение. Читать here.

По дороге возникли еще вот какие мысли и пожелания со стороны пользователей (пока еще не реализовано):
  1. Поддержка RAID (mirror, stripping, mirror+stripping)
  2. Поддержка NT3.51 (уже сделано)
  3. Горячая замена IDE устройств в OS младше w2k
  4. И еще куча других вещей, смотрите выше, в планах.

Обчитавшись спецификаций (винтов, ATAPI и ATA/IDE контроллеров) и сорцов (от NT4 и FreeBSD) я нарисовал версию BusMaster_v8a_ok.rar/tgz (52.1 Kb/60.5 Kb) (v 0.8a), успешно понявшую все доступные мне контроллеры, а именно:

  1. VIA 82C586 (ETEQ) on SOYO-5EHM
  2. VIA 8233 on Soltek-DRV4
  3. CMD 649 (дополнительный PCI контроллер)
А чуть позже и такие:
  1. Intel ICH on ~10 different machines
  2. Intel ICH2 on Dual-Processor machine
  3. ServerWorks CSB5 on Dual-Processor machine
  4. AcerLabs Aladdin V (Rev 0xC4) on Notebook
  5. Intel PIIX3
  6. VIA 82C686
  7. nVidia nForce MCP51 (PATA and SATA)

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

    Intel ICH7, ICH8
    ATI
    nVIDIA nForce3/nForce4

    buggy controllers:

    PC Technology RZ 1000
    PC Technology 37C922
    CMD 640
    SiS83C601

Проверить все это многообразие устройств достаточно трудно. Но некоторые матрицы совместимости (к-во проверенных машин) можно посмотреть здесь.


Version


Release Версия 0.47b (rar/tgz) - 198 Kb/0 bytes.
и исходники 0.47b (rar/tgz) - 375.4 Kb/0 bytes.
Debug Версия 0.47b (rar/tgz) - 467.5 Kb/0 bytes.
  • Добавлена обработка параметра реестра Exclude для отдельных интерфейсов целиком - PCIIDE, ISA, MCI.

2021.10.16

Release Версия 0.47a (rar/tgz) - 197.8 Kb/0 bytes.
и исходники 0.47a (rar/tgz) - 373.8 Kb/0 bytes.
Debug Версия 0.47a (rar/tgz) - 467.4 Kb/0 bytes.
  • исправлены .mak файлы для сборки в отсутствии PciDump
  • исправлен баг с падением на чипсетах Intel AHCI
  • исправлены условия обработки настроек для классов устройств PATA/SATA/AHCI

2019.04.03

Release Версия 0.47 (rar/tgz) - 197.8 Kb/355 Kb.
и исходники 0.47 (rar/tgz) - 373.5 Kb/570.9 Kb.
Debug Версия 0.47 (rar/tgz) - 468.9 Kb/819.6 Kb.
  • исправлены .mak файлы для сборки в Wine
  • из FreeBSD 12 перенесены изменения касающиеся AHCI.
  • новые чипсеты AMD, Intel и Marvell AHCI добавлены в список известных. Также добавлена поддержка ASMedia, ThunderX и Annapurna
  • добавлен флаг совместимости UNIATA_AHCI_ALT_SIG для AHCI возвращающих сигнатуру устройства альтернативным способом (PSIG вместо FIS).
  • исправление зависания при форматировании. Забыл установить состоние ожидания прерывания в IdeVerify().
  • проставлен флаг UNIATA_RAID_CONTROLLER для RAID-контроллеров. Note, по умолчанию UniATA не инициализирует RAIDs т.к. SkipRaids по умолчанию установлена в 1.
  • добавлены настройки для классов устройств PATA/SATA/AHCI (ROS-13988)

2019.03.10

Release Версия 0.46e8 (rar/tgz) - 173.5 Kb/268.1 Kb.
и исходники 0.46e8 (rar/tgz) - 344 Kb/484.3 Kb.
Debug Версия 0.46e8 (rar/tgz) - 432.2 Kb/713.8 Kb.
  • по умолчанию разрешена работа с Generic AHCI 3.1.0, 3.1.1, спасибо ReactOS team за тестирование. Работает даже на контроллерах, не внесенных в список.
  • из ReactOS перенесены изменения касающиеся сборки для 64-bit платформы.
  • выложил детальную историю обновлений, в т.ч. неопубликованных версий и коментарии - chglog.txt(ROS-13988)

2019.03.10

Release Версия 0.46e5 (rar/tgz) - 173.3 Kb/268 Kb.
и исходники 0.46e5 (rar/tgz) - 342.7 Kb/481.7 Kb.
Debug Версия 0.46e5 (rar/tgz) - 430.1 Kb/711.7 Kb.
  • исправлена ошибка с повторным выделением памяти для промежуточного буфера младше 4Гб в AtapiDmaAllocate() в режиме AHCI. Кроме того, что это утечка памяти, повторное выделение происходило при высоком IRQL, что могло приводить к падению системы. Спасибо Michael Arthur Long за тестирование. (ROS-13988)

2017.12.17

Release Версия 0.46e4 (rar/tgz) - 173.3 Kb/268 Kb.
и исходники 0.46e4 (rar/tgz) - 342.6 Kb/481.8 Kb.
Debug Версия 0.46e4 (rar/tgz) - 433.4 Kb/716.5 Kb.
  • исправлена поддержка nVidia MCP61 S2, спасибо Samuel Serapion (ROS-11773)

2017.12.12

Release Версия 0.46e3 (rar/tgz) - 173.3 Kb/268 Kb.
и исходники 0.46e3 (rar/tgz) - 342.7 Kb/481.7 Kb.
Debug Версия 0.46e3 (rar/tgz) - 433.3 Kb/716.4 Kb.
  • сделана обработка некорректных (нулевых) значений в данных о геометрии диска, возвращаемых эмулятором PCem VM. (ROS-11277, ROS-12909)

2017.04.08

Release Версия 0.46e2 (rar/tgz) - 173.2 Kb/267.9 Kb.
и исходники 0.46e2 (rar/tgz) - 342.4 Kb/481 Kb.
Debug Версия 0.46e2 (rar/tgz) - 433.3 Kb/715.6 Kb.
  • исправлена проблема с получением физ. адреса для блока памяти, для которого не инициализирована таблица страниц (так иногда бывает), спасибо Thomas Faber и ReactOS team. (ROS-11894)

2017.01.06

Release Версия 0.46e1 (rar/tgz) - 173.2 Kb/267.9 Kb.
и исходники 0.46e1 (rar/tgz) - 342.5 Kb/481.1 Kb.
Debug Версия 0.46e1 (rar/tgz) - 433.4 Kb/718 Kb.
  • исправлена ошибка, блокировавшая детект ATAPI устройств в предыдущей версии, спасибо KtP, Roy Tam.

2016.06.28

Release Версия 0.46e (rar/tgz) - 173.3 Kb/267.9 Kb.
и исходники 0.46e (rar/tgz) - 342.3 Kb/480.9 Kb.
Debug Версия 0.46e (rar/tgz) - 433.4 Kb/718 Kb.
  • исправлены ошибки ROS-11157 (поддержка I82371FB) и ROS-11296 (выход за границы буфера при обработке нештатных ситуаций в PIO MultiBLock). спасибо ReactOS team.

2016.06.28

Release Версия 0.46d8 (rar/tgz) - 173 Kb/267.8 Kb.
и исходники 0.46d8 (rar/tgz) - 341.6 Kb/480.5 Kb.
Debug Версия 0.46d8 (rar/tgz) - 433 Kb/717.9 Kb.
  • Испрвлен ряд проблем в поддержке ISA-only платформ. спасибо KtP.
  • Выяснили причину зависания NT4 на некоторых SMP-системах. Дело оказалось в эмуляции USB-клавиатуры и мыши. Нужно выключать ее в BIOS'е. Если такой возможности нет - не взлетит и повиснет при инициализации контроллера i8042. Возможно, поможет загрузка USB-драйвера до драйвера i8042.

2016.04.07

Release Версия 0.46d7 (rar/tgz) - 172.9 Kb/267.7 Kb.
и исходники 0.46d7 (rar/tgz) - 341.3 Kb/480 Kb.
Debug Версия 0.46d7 (rar/tgz) - 433.2 Kb/718.7 Kb.
  • исправлена проблема с дублированием строк и списка устройств в скомпилированном драйвере. спасибо KtP и ReactOS team. В результате еще уменьшен размер драйвера.

2016.04.03

Release Версия 0.46d6 (rar/tgz) - 171.3 Kb/255.6 Kb.
и исходники 0.46d6 (rar/tgz) - 338.7 Kb/467.1 Kb.
Debug Версия 0.46d6 (rar/tgz) - 430.6 Kb/672.9 Kb.
  • исправлена проблема с неопределяющимся CD/DVD на некоторых SATA. Спасибо Rayer за поиск версии, начиная с которой поддержка была поломана.
  • исправлена поддержка CSB5, старых ISA-систем на i486 - спасибо KtP за багрепорты и тестирование.
  • уменьшен размер драйвера
  • исправлен ряд проблем совместимости с различными версиями HAL и KERNEL.

2016.04.02

Release Версия 0.46 (rar/tgz) - 176.7 Kb/261.8 Kb.
и исходники 0.46 (rar/tgz) - 333.4 Kb/460.9 Kb.
Debug Версия 0.46 (rar/tgz) - 433.5 Kb/674.5 Kb.
  • исправлены проблемы в поддержке записи на диск и работе с CD-ROM в VBox, QEmu
  • исправлена проблема с переполнением буфера на ISA контроллерах при фрагментации запроса на LBA устройствах.
  • поддержка 32-bit I/O в PIO
  • поддержка DMA на Intel PIIX (8086:1230)
  • изменена работа с CD-Changer'ами

2016.03.09

Release Версия 0.45j1 (rar/tgz) - 176.5 Kb/261.7 Kb.
и исходники 0.45j1 (rar/tgz) - 331.4 Kb/458.8 Kb.
Debug Версия 0.45j1 (rar/tgz) - 432.7 Kb/673.2 Kb.
  • поддержка VBox, QEmu
  • решены проблемы медленного детекта отсутствующих устройств, особенно на виртуальных машинах.
  • поддержка AHCI контроллеров в режиме совместимости (без BAR5).
  • исправлена зависимость выравнимания данных от компилятора

2015.10.22

Release Версия 0.45h1 (rar/tgz) - 176.5 Kb/261.6 Kb.
и исходники 0.45h1 (rar/tgz) - 328.6 Kb/455.3 Kb.
Debug Версия 0.45h1 (rar/tgz) - 434.2 Kb/680.6 Kb.
Промежуточная версия, боремся со странными проблемами инициализации некоторых ATAPI устройств на некоторых SATA/AHCI. Общие полезные изменений:
  • добавлена поддержка Cyrix 5510/5520/5030/5035 из драйверов Linux
  • оптимизирован алгоритм инициализации ATAPI: если SCSIOP_MECHANISM_STATUS вызывает зависание - больше попытки ее использования не предпринимаются.
  • добавлена обработка странных ATAPI устройств, которые не отдают правильную сигнатуру на шине (в регистрах WordCount).

2015.02.27

Release Версия 0.45e (rar/tgz) - 175.4 Kb/259.9 Kb.
и исходники 0.45e (rar/tgz) - 325.3 Kb/450.5 Kb.
Debug Версия 0.45e (rar/tgz) - 430.7 Kb/677.4 Kb.
    Добавлена настройка Force80pin.
  • Исправлена проблема с настройкой DMA на ICH4. Из-за этой ошибки получалась несимметричная скорось передачи в UDMA 5 - 80/16 Мб/с (чтение/запись)
  • Добавлена обработка параметра реестра Exclude для отдельных каналов Compatible и AHCI контроллеров.
  • Частитчно сделана обработка "Exclude" для ATA/SATA (влияет только на общее количество каналов согласно результирующей битовой маске).
  • Добавлен параметр PortMask для избирательной инициализации каналов AHCI и частично для SATA (как "Exclude").
  • Добавлена настройка NumberChannels для SATA.

2014.10.30

Release Версия 0.45d (rar/tgz) - 175.1 Kb/259.3 Kb.
и исходники 0.45d (rar/tgz) - 324.6 Kb/450 Kb.
Debug Версия 0.45d (rar/tgz) - 430.2 Kb/675.9 Kb.
Добавлена настройка Force80pin.
2014.10.23

Release Версия 0.45c1 (rar/tgz) - 175 Kb/259.3 Kb.
и исходники 0.45c1 (rar/tgz) - 324.6 Kb/449.9 Kb.
Debug Версия 0.45c1 (rar/tgz) - 429.6 Kb/675.3 Kb.
  • исправлена поддержка AHCI - зависание на контроллерах, не имеющих legacy регистров управления прерываниями.
  • исправлен код определения режима PATA/SATA/AHCI для новых Intel
    2014.10.22

    Release Версия 0.45a7 (rar/tgz) - 174.9 Kb/259.2 Kb.
    и исходники 0.45a7 (rar/tgz) - 323.7 Kb/449 Kb.
    Debug Версия 0.45a7 (rar/tgz) - 429 Kb/673.7 Kb.
  • поддержка AHCI включена по-умолчанию
  • добавлены DevID для следующих конроллеров
    • новые ATI IPX700/800
    • nVidia AHCI контроллеры
    • VIA AHCI контроллеры
    • новые Promise
    • Hudson-2
    • SIS 630S, 962, 963, 1182 and 1182,
    • Marvell PATA
  • добавлен код определения режима PATA/SATA и AHCI для новых ATI
  • почищен от дубликатов список устройств
  • унифицированы OS-specific INF'ы
  • исправлен DevID для RZ 100x
  • добавлена проверка неинициализированного BAR4 для SATA контроллеров
  • улучшена обработка ошибок в режиме AHCI.
  • ATAPI команды READ_CD и READ_CD_MFS могут работать в DMA. Управляется ключем реестра AtapiDmaRawRead.
  • Добавлена корректная поддержка "Marvell 9123" AHCI, сообщающего неверное количество каналов (8 вместо реальных 4х).
    2014.08.12

    Release Версия 0.44e (rar/tgz) - 169.6 Kb/247.9 Kb.
    и исходники 0.44e (rar/tgz) - 316.9 Kb/437.3 Kb.
    Debug Версия 0.44e (rar/tgz) - 421.3 Kb/660.2 Kb.
  • Косметические изменения в коде
  • Добавлена экспериментальная поддержка опции BIOS Handoff для AHCI контроллеров.
    2013.11.11

    Release Версия 0.44d (rar/tgz) - 169.6 Kb/247.7 Kb.
    и исходники 0.44d (rar/tgz) - 316.6 Kb/437 Kb.
    Debug Версия 0.44d (rar/tgz) - 420.7 Kb/658.5 Kb.
  • Исправлена ошибка с выпаданием в PIO на SIS 961.
  • Исправлен бесконечный цикл в обработке PIO запросов на IDE устройствах, генерирующих промежуточные прерывания в процессе передачи и устанавливающих статус transfer completed в конце. Проблема была вызвана неправильной (отсутствующей) обработкой счетчика переденных байтов в этой ветке кода.
    2013.03.21

    Release Версия 0.44c3 (rar/tgz) - 169.8 Kb/247.9 Kb.
    и исходники 0.44c3 (rar/tgz) - 316.4 Kb/436.6 Kb.
    Debug Версия 0.44c3 (rar/tgz) - 420.8 Kb/658.4 Kb.
  • Переработан код ожидания готовности ATAPI после сброса. В результате устранена задержка, возникающая в случае, если устройство быстро устанавливает и сбрасывает BUSY.
    2013.01.09

    Release Версия 0.44c1 (rar/tgz) - 169.7 Kb/248 Kb.
    и исходники 0.44c1 (rar/tgz) - 316.2 Kb/436.4 Kb.
    Debug Версия 0.44c1 (rar/tgz) - 420.7 Kb/658.5 Kb.
  • Исправлена обработка ошибок при отправке ATAPI команд. Ряд устройств устанавлювают статус ошибки сразу после приема некорректной пакетной команды. В этом случае нельзя запускать DMA, т.к. получим таймаут и reset. С другой стороны, есть устройства, которые не сбрасывают статус ошибки до генерации прерывания о завершении операции. Т.е. если одна команда завершилась с ошибкой, при отправке следующей мы не будем точно знать, была ли она принята устройством. Решение - при появлении бита ERR на стадии отправки команды делать запрос SENSE_INFO, который гарантированно отработает и сбросит статус ошибки. После этого можно пытыться отправить следующую команду.