Alter.Org.UA  
 << Back Home EN en   Donate Donate www/www1/www2

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

Обновлено 2016.06.28

Download

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

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 (см. 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 планируется сделать одно очень существенное изменение. Читать здесь.

По дороге возникли еще вот какие мысли и пожелания со стороны пользователей (пока еще не реализовано):
  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) на SOYO-5EHM
  2. VIA 8233 на 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.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, который гарантированно отработает и сбросит статус ошибки. После этого можно пытыться отправить следующую команду.
    2012.12.29

  • Release Версия 0.44b4 (rar/tgz) - 169.6 Kb/247.9 Kb.
    и исходники 0.44b4 (rar/tgz) - 315.6 Kb/436 Kb.
    Debug Версия 0.44b4 (rar/tgz) - 420.5 Kb/658.2 Kb.
  • Исправлена работа LogToDisplay (by KtP)
  • Исправлен поддержка Intel ICH7 со специфическим способом обращения к регистрам и их и размещением в SATA режиме.
  • Исправлен поддержка Intel ICH7 со специфическим способом обращения к регистрам и их и размещением в SATA режиме.
  • Сделана более безопасная работа с регистром PCI Command. Прежний код вызывал interrupt storm на некоторых контроллерах Intel
  • Сделана очистка статуса прерывания на стадии опроса устройств. Прежний код также вызывал interrupt storm на некоторых контроллерах Intel.
  • Исправлена работа с SATA ATAPI устройствами, не умеющими обрабатывать сервисные команды (кроме READ/WRITE) в DMA режиме.
    2012.10.07

    Release Версия 0.43f5 (rar/tgz) - 169.3 Kb/247.6 Kb.
    и исходники 0.43f5 (rar/tgz) - 314.6 Kb/434.5 Kb.
    Debug Версия 0.43f5 (rar/tgz) - 419.9 Kb/657.1 Kb.
  • добавлен код захвата PCI части Legacy контроллеров. Это предотвращает конфликт с другими драйверами. Т.к. ранее сисетме сообщалось только об ISA ресурсах, для PCI части контроллера мог быть загружен другой драйвер, что приводило к падению или нарушению работоспособности системы. Проверено в NT4 и Win 2003.
  • Исправлен установочный .INF-файл uata_comm.inf для UniATA virtual communication port. Теперь драйвер опознается и "устанавливается" автоматически.
    2012.09.12

    Release Версия 0.43e2 (rar/tgz) - 168.7 Kb/247 Kb.
    и исходники 0.43e2 (rar/tgz) - 313.4 Kb/434.9 Kb.
    Debug Версия 0.43e2 (rar/tgz) - 420 Kb/657.3 Kb.
  • Исправлен установочный .INF-файл (в каталоге для XP, подходит также для 2003). Дело было в том, что %12% не указывает на каталог с драйверами, как это было ранее. Сейчас используется %10%\System32\drivers.
  • Добавлен установочный .INF-файл uata_comm.inf для UniATA virtual communication port.
  • исправлен баг в работе atactl.exe с AHCI.
    2012.08.07

    Release Версия 0.43d2 (rar/tgz) - 168.2 Kb/246.3 Kb.
    и исходники 0.43d2 (rar/tgz) - 311.9 Kb/432.7 Kb.
    Debug Версия 0.43d2 (rar/tgz) - 418.7 Kb/655.7 Kb.
  • Добавлен код активации режима AHCI для случаем, когда это не сделано BIOS'ом
  • Код сброса контроллера изменен в соответствии с рекомендациями по работе с включенным MSI.
  • При установке скорости передачи проверка максимально возможного режима привязывается к каналу, т.к. существуют контроллеры с физически разными каналами (например, PATA и SATA)
  • Внесены последние изменения из ReactOS и FreeBSD.
  • реализована экспериментальная эмуляция параметров Immediate, StartStop и PowerCondition в коменде SCSIOP_START_STOP_UNIT. Используются ATA команды IDLE, SLEEP (выключение) и STANDBY (остановка шпинделя). Возврат из состояния Sleep осуществляется сбросом шины (HardReset)
  • Исправлен код определения типа PATA шлейфа (80/40 pin) для контроллеров VIA и Intel, а также устройств, не поддерживающих HwRes в Identify. В предыдущих версиях случалось необоснованное занижение скорости до UDMA2.
  • Исправлен, унифицирован и дополнен последними фичами код SMART, SCT и ATA PASSTHROUH. Теперь smartmontools работает с UniATA.
  • Добавлены настройки AdvancedPowerMode и AcousticMgmt. По умолчанию применяются минимальное потребление без standby (без остановки диска).
    2012.08.25

    Release Версия 0.43a1 (rar/tgz) - 166 Kb/243.3 Kb.
    и исходники 0.43a1 (rar/tgz) - 305.1 Kb/424.6 Kb.
    Debug Версия 0.43a1 (rar/tgz) - 412.6 Kb/647.7 Kb.
  • Окончательно исправлен и унифицирован код отдачи статуса SRB_STATUS_DATA_OVERRUN в различных ветках отбаботки прерывания.
  • Исправлен баг с ожиданием готовности после ATAPI Soft Reset. На некотором оборудовании BUSY устанавливается спустя некоторое время после команды RESET.
  • Добавлена проверка размера буфера во все IOCTL'ы UniATA.
  • Исправлен ряд багов с проверкой PATA кабеля на предмет 80-пиновости.
  • Исправлено отображение скорости в atactl, разделены понятия скорости шины и режима работы устройства (PIO/DMA)
  • Исправлены ошибки с нумерацией физических и логических каналов на контроллерах в Legacy режиме в AtapiChipInit().
    2012.08.12

    Release Версия 0.42h2 (rar/tgz) - 165.5 Kb/242.8 Kb.
    и исходники 0.42h2 (rar/tgz) - 302.8 Kb/421 Kb.
    Debug Версия 0.42h2 (rar/tgz) - 409 Kb/643.1 Kb.
  • Исправлен баг с отдачей статуса SRB_STATUS_DATA_OVERRUN в AHCI ATAPI. В MS Windows системах это делало диск нечитаемым (получался неожиданный статус SUCCESS от READ TOC). ReactOS оказалась нечувствительной к этой ошибке.
    2012.08.07

    Release Версия 0.42h (rar/tgz) - 165.5 Kb/242.9 Kb.
    и исходники 0.42h (rar/tgz) - 302.6 Kb/420.5 Kb.
    Debug Версия 0.42h (rar/tgz) - 408.9 Kb/643.4 Kb.
  • Первые тесты AHCI ATAPI прошли успешно.
  • SATA и AHCI ATAPI теперь не переключаются в PIO-режим для исполнения команд отличных от чтения и записи.
  • Добавлена поддержка эмуляции SCSI-команд READ16/WRITE16/VERIFY16/READ_CAPACITY16. Это нужно для расширения адресного пространства LBA до 64 бит, что дает возможнлсть работать с дисками более 2Тб, которые используют более 32 бит для LBA. Note: дисковые драйверы верхнего уровня тоже должны поддерживать эту возможность.
  • Обнаружил обсуждение UniATA на habrahabr.ru. :)
    2012.08.05

    Release Версия 0.42e2 (rar/tgz) - 164.8 Kb/242.3 Kb.
    и исходники 0.42e2 (rar/tgz) - 292.2 Kb/389.6 Kb.
    Debug Версия 0.42e2 (rar/tgz) - 406 Kb/637.9 Kb.
  • продолжается работа над поддержкой AHCI ATAPI. Уже не виснет, не падает, но и не работает.
  • немного наведен порядок в коде AHCI. Поправлены ошибки в логике.
  • исправлена ошибка в коде AHCI, касающаяся дисков, использующих LBA28 (от 32 до 128Гб).
  • исправлен и улучшен код ожидания готовности устройства после прерывания.
  • исправлен баг с инициализацией UDMA режимов на Intel PATA. Ранее из FreeBSD был перенесен неудачный код. На данный момент эти изменения отменены. Из-за ошибки скорость передачи на ATAPI падала с 18Мб/с до 3Мб/с.
  • исправлен баг с инициализацией ISA без (или с нерабочими) регистров DMA.
  • исправлен баг с отсутствующей декларацией 2го диапазона портов на ISA.
  • исправлен вывод размера CHS дисков в atactl.exe
  • теперь в комплекте с исходниками поставляется chglog.txt со списком всех изменений от версии к версии (в т.ч. промежуточные). Thanks to KtP for testing.
    2012.08.01

    Release Версия 0.42 (rar/tgz) - 125.2 Kb/201.9 Kb.
    и исходники 0.42 (rar/tgz) - 287.9 Kb/407.4 Kb.
    Debug Версия 0.42 (rar/tgz) - 348.5 Kb/586.9 Kb.
  • Сделана поддержка AHCI! thanks to KtP for testing.
  • оптимизирована работа DMA (соседние физ. блоки объединяются в 1 дескриптор)
  • оптимизирован код проверки прерываний
  • исправлена ошибка в ф-ции включения прерываний (не очищался предудущий статус)
  • исправлена ошибка в коде передачи обслуживания прерывания в DPC (нарушалась парность запрета/рахрешения прерывания в одном хитром случае)
  • добавлена подстройка таймингов для старых машин (i386 isa) и виртуальных машин.
  • в ISR теперь используется BaseStatus вместо AltStatus для предотвращения прерываний.
  • исправлен баг с получением информации об устройстве на SATA контроллерах (логика общения atactl и драйвера)
  • исправлен баг с декларацией 2го диапазона портов на ISA контроллерах
  • исправлен ряд ошибок, возникающих в случае, если контроллер имеет не более 1 устройства на канале.
    2012.07.20

    Release Версия 0.41b5 (rar/tgz) - 160.6 Kb/260.5 Kb.
    и исходники 0.41b5 (rar/tgz) - 281.9 Kb/399.4 Kb.
    Debug Версия 0.41b5 (rar/tgz) - 426.6 Kb/714.6 Kb.
  • Внес правки из BugZilla ReactOS.
    2012.06.29

    Release Версия 0.41b4 (rar/tgz) - 160.6 Kb/260.5 Kb.
    и исходники 0.41b4 (rar/tgz) - 282 Kb/399.6 Kb.
    Debug Версия 0.41b4 (rar/tgz) - 426.8 Kb/714.6 Kb.
  • Промежуточная версия. Исправлены ошибки обращения за пределы выделенной памяти при инициализации ISA контроллеров. Также проявлялос в случае, если Primary или Secondary IDE канал по каким-либо причинам не был инициализирован с поддержкой DMA/BusMaster. Thanks to Caemyr for bug report an testing.
  • Добавлена поддержка новых Intel'овский контроллеров Patsburg и Panther Point.
  • Исправлен idedma.mak и список файлов pkg_files.src.

  • Также выложена обновленная ветка v0.40 с исправлениями найденных ошибок (из v0.41b4).
    Release Версия 0.40b3 (rar/tgz) - 120.4 Kb/197.1 Kb.
    и исходники 0.40b3 (rar/tgz) - 271.8 Kb/386.1 Kb.
    Debug Версия 0.40b3 (rar/tgz) - 325.6 Kb/562 Kb.
    2012.06.27

    Release Версия 0.40b2 (rar/tgz) - 157 Kb/255.2 Kb.
    и исходники 0.40b2 (rar/tgz) - 270 Kb/383.1 Kb.
    Debug Версия 0.40b2 (rar/tgz) - 411.3 Kb/701.9 Kb.
  • У целой линейки Intel специфический способ общения с SATA регистрами. И как раз для этого случая некорректно отрабатывалось ветвление SATA/PATA. Могло тормозить систему, особенно при работе с ATAPI.
    Исправлено.
  • Слуайно наткнулся на проблему 128Гб у нового Hitachi 1Tb HDD. При обращении в режиме адресации LBA28 к блокам начиная с LBA 0xfffff80 (чуть-чуть не доходя до границы 128Гб) операции чтения/записи более 1 сектора вызывали ошибку, хотя граница при этом не пересекалась. Пришлось немного уменьшить размер области, адресуемой в режиме LBA28.
    Release Версия 0.40b1 (rar/tgz) - 157.1 Kb/255.3 Kb.
    и исходники 0.40b1 (rar/tgz) - 269.7 Kb/382.8 Kb.
    Debug Версия 0.40b1 (rar/tgz) - 410.9 Kb/701.9 Kb.
  • Просмотрел ряд bug-report'ов в в BugZilla ReactOS и сделал ряд изменений.
  • Исправлена ошибка в работе UDMA2 на контроллерах линейки Intel ICH1/2/3/4/5.
  • Экспериментальные правки в коде автоматического снижения скорости передачи. Код старый, но как оказалось - не совсем работает.
  • Сделан код автоопределение виртуальных машин на основе сканирования PCI шины. Определяются VirtualBox, VMWare, QEmu. См. также ключ реестра VirtualMachineType для принудительной установки типа VM.
  • Проверил на своей машине включение/выключение HDD на ходу по NT4. Работает. Для безопасности процедуры нужно
    1. размонтировать все разделы (Disk Administrator)
    2. с помощью atactl -h "спрятать" диск и в течение 20 секунд отключить шлейф данных.
    3. После этого на всякий случай выполнить сброс с помощью atactl -r.
    4. запустить еще раз Disk Administrator.

    Подключение - в обратном порядке:
    1. подключаем кабель
    2. сброс устройства с помощью atactl -r
    3. запускаем Disk Administrator
    4. монтируем разделы

    Release Версия 0.40b (rar/tgz) - 156.8 Kb/255.1 Kb.
    и исходники 0.40b (rar/tgz) - 269.1 Kb/382.1 Kb.
    Debug Версия 0.40b (rar/tgz) - 410.4 Kb/701.8 Kb.
  • Предпринята попытка синхронизировать изменения с веткой ReactOS, Revision 50985
  • В ветке ReactOS в ф-ции AtapiSendCommand() исправлена ошибка с ненужным вызовом AtapiEnableInterrupts() в случае, если не дождались DRQ. Это гарантировано вызывало зависание в случае, если устройство протормозило с ответом. Т.к. в логах я видел VERIFY VOLUME для CD, а далее - отмена запроса (CancelIrp), могу предположить, что зависания при работе с CD связаны именно с этой частью кода.
    Для управления работой с прерываниями ATAPI в реестр добавлена опция AtapiSendDisableIntr.
  • В реестре сделана настройка таймингов ожидания BUSY и DRQ.
  • Сделана оптимизация под VirtualBox (включается ключем VirtualBox в реестре). Устанавливает тайминги и максимаьлно совместимые опции работы с ATAPI (CD/DVD) устройствами.
  • Сделал объявление ULONGIO_PTR 32-битный указатель на I/O порт вместо ULONG_PTR. Для ReactOS ULONGIO_PTR превращается в ULONG_PTR, для NT DDK - в ULONG. Иначе у меня собираться не будет, т.к. ULONG_PTR - относительно новый тип, в старых DDK его не было.
  • Добавил явное указание формата вызова NTAPI в объявления ф-ций.
  • Внес изменения, касающиеся типов PCCH, SCHAR, PCWSTR.
  • Внес изменения в CheckDevice(). Действительно, потерялся кусок кода Hard Reset.
  • Документированы все ключи реестра: Registry settings
    Release Версия 0.41b3 (rar/tgz) - 159.8 Kb/258.7 Kb.
    и исходники 0.41b3 (rar/tgz) - 279.1 Kb/394.9 Kb.
    Debug Версия 0.41b3 (rar/tgz) - 425.2 Kb/712.2 Kb.
  • Промежуточная версия, поддержка AHCI пока уперлась в то, что PIO в AHCI работает почти также как и DMA. Нужно писать соответствующий код.
    Release Версия 0.40a5 (rar/tgz) - 156.5 Kb/254.8 Kb.
    и исходники 0.40a5 (rar/tgz) - 268.3 Kb/381.3 Kb.
    Debug Версия 0.40a5 (rar/tgz) - 409.1 Kb/701.3 Kb.
  • Исправлено падение в синий экран при работе с SATA/AHCI контроллерами линеек Intel.
  • Добавлена поддержка контроллеров с разным числом устройств на канале. Такое себе архитектурное изменение.
  • Дополнен код инициализации AHCI (пока еще в разработке)
    Release Версия 0.40a1 (rar/tgz) - 156 Kb/254.3 Kb.
    и исходники 0.40a1 (rar/tgz) - 267.4 Kb/380.1 Kb.
    Debug Версия 0.40a1 (rar/tgz) - 406.5 Kb/699.3 Kb.
  • Добавлена поддержка новых SATA/PATA контроллеров ITE, Intel, VIA.
  • Исправлено падение в синий экран при работе с неизвестными контроллерами линеек VIA.
  • Исправлен ряд ошибок в поддержке VIA SATA. Спасибо RoyTam за тестирование и сбор логов.
    2010.11.27

    Release Версия 0.39j (rar/tgz) - 150.5 Kb/240 Kb.
    и исходники 0.39j (rar/tgz) - 261.2 Kb/364.8 Kb.
    Debug Версия 0.39j (rar/tgz) - 402.8 Kb/686.5 Kb.
  • Добавлена поддержка еще ряда новых SATA/PATA контроллеров, в т.ч. Marvell, AMD, ATI, nVidia, VIA.
  • Исправлено падение в синий экран при работе с любыми SATA контрллерами.
  • Исправлен ряд ошибок в поддержке VIA SATA.
  • Продолжаю писать поддержку AHCI :)
  • Добавил совместимость с DDK 2003
    2008.09.10

    Release Версия 0.39g (rar/tgz) - 150.2 Kb/249.4 Kb.
    и исходники 0.39g (rar/tgz) - 259.9 Kb/372.5 Kb.
    Debug Версия 0.39g (rar/tgz) - 398.4 Kb/692.6 Kb.
    Исправлен баг (повисание) в работе с винтами больше 128Гб.
    2008.07.05

    Release Версия 0.39f (rar/tgz) - 150.1 Kb/249.4 Kb.
    и исходники 0.39f (rar/tgz) - 259.4 Kb/372.2 Kb.
    Debug Версия 0.39f (rar/tgz) - 397.5 Kb/693.7 Kb.
  • Переписан код работы с портами в PIO режиме для повышения производительности. Спасибо KtP.
  • Исправлен ряд ошибок в коде роботы с вирт. коммуникационным устройством. Драйвер эмулирует на каждом канале доп. виртуальное устройство, которое позволяет работать со спрятаными/невидимыми для системы ATA устройствами. Это сделано для обхода ограничений стандартного scsiport.sys, который не позволяет обращаться к несуществующим (с его точки зрения) устройствам.
  • Исправлены ошибки с неработающим переключением скорости через atactl.exe.
  • Исправлены ошибки в поддержке PIO на Intel.
  • Исправлена в коде обнаружения контроллеров. Не работыли "известные" контроллеры, имеющие нестандартные PCI Device Class и SubClass.
  • В очередной раз переписаны INF-файлы...
  • Исправлена ошибка в тексте подсказки atactl.exe. Вместо ключа a было написано c.
    Release Версия 0.39d (rar/tgz) - 150.2 Kb/249.6 Kb.
    и исходники 0.39d (rar/tgz) - 258.6 Kb/371.4 Kb.
    Debug Версия 0.39d (rar/tgz) - 395 Kb/695.2 Kb.
  • Исправлена ошибка в поддержке ATAPI устройств, генерирующих отдельное прерывание, сообщающее о готовности принять командный пакет. При наличии таких устройств в системе иногда наблюдались странные повисания при обращении к CD/DVD. Наиболее ярко проявилось на контроллере ICH2 с 2мя приводами на одном канале, причем именно на Release версии. Спасибо KtP за тестирование и сбор логов на этих железках.
  • Реструктурирован каталог с INF-файлами. Теперь для каждой ОС свой каталог, чтобы не путаться. И несколько дополнены сами INF'ы. Пробуйте.
  • Добавлена опция ReadOnly для ATA устройств.
  • Исправлены падения в синий экран при обращении по неправильных (слишком больших) адресам устройств.
  • Добавлена экспериментальная поддержка ISA-PNP и PCMCIA контроллеров.
    Release Версия 0.39b1 (rar/tgz) - 111.3 Kb/148 Kb.
    и исходники 0.39b1 (rar/tgz) - 254.7 Kb/329.6 Kb.
    Debug Версия 0.39b1 (rar/tgz) - 357.7 Kb/588.1 Kb.
    Да... почти пол-года меня не было... ну вот зато теперь целаю куча новостей :)
  • Сегодня UniATA включили в состав ReactOS. Это круто.
  • Сделана поддержка "прятанья" устройств. Т.е. устройство становится невидимым, но к нему можно достучаться специальным образом. Например, очень хорошо подойдет для диагностических и восстановительных утилит. Кроме того, так можно реальзовать безопасное подключение и отключение устройств.
  • Сделана возможность перевода жестеого диска в режим "только чтение" - ReadOnly. Пока только настройками реестра.
  • Исправлен злой глюк в коде поддержки ATI. Вместо сравнения типа контроллера стояло присваивание. В результате управление передавалось не туда... Спасибо ReactOS.
  • Наведено еще немного красоты - '-1' заменены на понятные именованые константы :)
  • Начаты работы по поддержке WDM (PnP) модели. Т.е. чтобы драйвер работал в 2000 и старше идеологически правильно и не мешал делать hibernate и sleep.
  • Сделана поддержка ISA IDE контроллеров с нестандартными диапазонами портов ввода-вывода и прерываниями. Например, IDE контроллер от карточки ESS-1868.
  • Изменена логика определения типа IDE кабеля (80/40 pin). Теперь по умолчанию принимаается, что контроллер умеет определять тип. Если же не умеет, или мы не знаем как - то в случае ошибок DMA скорость автоматически сбрасывается до UDMA-33. А делать так нужно потому, что многие жесткие диски неправильно отдают информацию о типе кабеля. Они вообще тоже должны были это уметь проверять, но некоторые вместо текужего типа кабеля рассказывают о предпочитаемом :)
  • Убраны дублирующиеся куски кода в инициализации контроллеров и отдельных каналов.
    2007.10.28

    Release Версия 0.38c2 (rar/tgz) - 103.6 Kb/137.1 Kb.
    и исходники 0.38c2 (rar/tgz) - 242.1 Kb/310.6 Kb.
    Debug Версия 0.38c2 (rar/tgz) - 293.9 Kb/483.6 Kb.
    Еще одно исправление в "is anobody home". Касается некоторых винтов с поддержкой LBA48 (даже меньших 128Гб).
    2007.05.29

    Release Версия 0.38c1 (rar/tgz) - 103.6 Kb/137.1 Kb.
    и исходники 0.38c1 (rar/tgz) - 242.1 Kb/310.6 Kb.
    Debug Версия 0.38c1 (rar/tgz) - 293.7 Kb/483.6 Kb.
    Починил поддержку SATA, которую поломал в предыдущей версии. Оказывается, метод поверки наличия устройства по возможности записи/чтения в регистры винта (is anobody home) на nForce SATA не работает.
    2007.05.29

    Release Версия 0.38c (rar/tgz) - 103.6 Kb/137 Kb.
    и исходники 0.38c (rar/tgz) - 242 Kb/310.5 Kb.
    Debug Версия 0.38c (rar/tgz) - 293.6 Kb/483.3 Kb.
  • Исправлен страшный баг: UniATA пытался перепрограммировать все PCI устройства, относящиеся к классу Storage Controller. Даже если потом оказывалось, что это устройство не относится к поддерживаемым. В результате по непонятным на 1й взгляд причинам страдали всякие Promise RAID, некоторые Card-readers и т.п. В панели управления это выглядело как "Resource conflict". Починил!
  • Сделаная грамотная проверка наличия устройства на шине (без бессмысленного ожидания заведомо отсутствующей железки). В служебных утилитах называется is anybody home (есть кто дома ?)
    ;)
    Спасибо Сергею Казанскому (http://hdd-911.com) за ценные знания.
  • На SATA контроллерах убран ненужный поиск Slave устройств. Их там нет и быть не может. Только одно Master-устройство. А разветвители во-первых иначе программируются, а во-вторых пока не поддерживаются.
  • В atactl.exe добавлен вывод доп. информации об ATA устройствах (по результатам чтения пасспорта командой ATA_IDENTIFY).
  • Сделан поиск новых устройств и удаление подключеных из командной строки. Работает во всех версиях Windows, включая NT3.51/NT4. В теории это должно давать возможность горячей замены.
  • Добавлена поддержка списка плохих/ненадежных блоков, чтобы драйвер не мучал диск, а сразу возвращал ошибку (by Nikolai Vorontsov).
  • Сделана поддержка относительно новых запросов (начиная с Win 2000):
      SRB_FUNCTION_RESET_DEVICE
      SRB_FUNCTION_RESET_LOGICAL_UNIT
    
  • Поправлена поддержка стааарых PIO0 винтов.
    Thanks to KtP for testing.
  • Поправлена поддержка PIO-xxx винтов, не умеющих переключать режим передачи (т.е. работают к примеру только в PIO-2).
  • Добавлена поддержка NT3.51 на i386.
    Thanks to KtP for testing.
    2007.05.26

    Release Версия 0.37b (rar/tgz) - 91.5 Kb/112.6 Kb.
    и исходники 0.37b (rar/tgz) - 217.5 Kb/270.5 Kb.
    Debug Версия 0.37b (rar/tgz) - 267.5 Kb/424 Kb.
  • В результате перехода на CrossNT.lib v0.2 в основной ветке наконец-то появилась поддержка NT3.51.
    2007.04.01

    Release Версия 0.37 (rar/tgz) - 90.5 Kb/111.6 Kb.
    и исходники 0.37 (rar/tgz) - 209 Kb/259.7 Kb.
    Debug Версия 0.37 (rar/tgz) - 263.3 Kb/418.7 Kb.
    NT3.51 Debug: UniATA v0.37 for NT 3.51
  • Исправлен мега-глюк в работе с контроллерами, у которых порт данных отображем в память. В первыю очередь это коснулось ATI и SII SATA. Машинка просто вешалась при считывании блока данных в PIO-режиме. А без этого даже нельзя узнать, что за устройство перед нами.
  • Исправлен целый ряд мелких глючков, из-за которых на SATA контроллерах с нестандартным размещением управляющих регистров использовался только PIO режим.
  • Изменен порядок инициализации. В более правильную сторону. В наследство от ATAPI.SYS достался код, в котором инициализация происходила на стадии опознавания. И это работало, пока не наткнулся на контроллер, который в ответ на команды инициализации генерирует прерывание, которое некому ловить, т.к. с точки зрения ОС контроллер еще не инициализирован.
  • Привел в порядок код опознавания прерываний, в т.ч. неожиданных. Это особенно актуально для SATA, где прерывание может приходить не только в следствие действий драйвера, а и для оповечения о полезных событиая типа появления/ухода устройства.
  • Поубирал немного лишних кусков кода, а для некоторых сделал правильные условия исполнения. Например, в SATA режиме не нужны некоторые задержки, проверки и команды инициализации.
    2007.03.24

    Release Версия 0.36a (rar/tgz) - 89.9 Kb/111.1 Kb.
    и исходники 0.36a (rar/tgz) - 185.9 Kb/234.2 Kb.
    Debug Версия 0.36a (rar/tgz) - 263.1 Kb/419.8 Kb.
  • Исправлен глюк с неинициализироваными адресами регистров SATA/SATA-2. Ошибка касалась всех контроллеров кроме NVIDIA. В результате драйвер не находил подключенные устройства, а винда не находила загрузочного диска и говорила INACCESSIBLE_BOOT_DEVICE.
  • Сделана, но пока еще не проверена, работа в DMA-режиме с 64-битными физическими адресами (больше 4Гб) на контроллерах, которые этого еще не понимают. Для этого пр инеобходимости выделяется временный буфер в памяти ниже 4Гб.
    2007.01.10

    Release Версия 0.35c (rar/tgz) - 89.3 Kb/110.5 Kb.
    и исходники 0.35c (rar/tgz) - 184.3 Kb/231.8 Kb.
    Debug Версия 0.35c (rar/tgz) - 260.2 Kb/415.4 Kb.

    На Новый Год, под елочку :)

  • Введена поддержка SATA/SATA-2 для VIA, SII, SIS, INTEL (кроме AHCI режима), ATI, NVIDIA, SERVERWORKS, ALI. Это серьезное изменение номер 1.
  • Сделана виртуальная адресация регистров контроллера. Это позволяет очень легко добавлять поддержку контроллеров с нестандартным расположением управляющих регистров. Все SATA (не AHCI) таковыми являются. Это серьезное изменение номер 0.
  • Теперь драйвер использует спец. библиотеку из комплекта DbgDump, которая позволяет обходить различия API разных версий NT.
  • Сделана поддержка более 2х каналов на одном контроллере.
  • Сделана проверка физ. адресов на 32битность. А то систем с физ. памятью больше 4Гб становится все больше. А контроллеров, умеющих такое пока мало.
    2006.12.30

    Release Версия 0.33h2 (rar/tgz) - 83.3 Kb/99.8 Kb.
    и исходники 0.33h2 (rar/tgz) - 175.4 Kb/218.1 Kb.
    Debug Версия 0.33h2 (rar/tgz) - 196.9 Kb/240.5 Kb.
    NT3.51 Debug

    Не прошло и года, как вышла новая версия :)

  • Наконец я сделал представление стандартного 2х-канального контроллера в виде 2х логических устройств в системах Win 2000 и старше. Ранее этот контроллер представлялся как одно устройство с 2мя прерываниями (у каждого канала свое). Работало это когда как. Вероятно, в зависимости от фазы луны и высоты над уровнем моря. Это серьезное изменение номер 1.
  • Понял и научился правильно использовать SCSIPORT'овое API для отложеной обработки прерываний. Оказалось, что пользоваться стоит только таймером. А ScsiPortNotification(CallDisableInterrupts, ...) и ScsiPortNotification(CallEnableInterrupts, ...) не годятся. Хотя они и понижают IRQL и тем самым дают зеленый свет другим прерываниям, совместное использование их с таймером приводит к повисанию. А ожидание готовности ATAPI устройства - процесс иногда длительный. И лучше применять отложеную обработку по таймеру. Что и было сделано. И никаких больше танцев с бубном :) Это серьезное изменение номер 2.
  • Найдена и исправлена страшная ошибка в коде сброса контроллера. Если сброс произошел во время обработки рекурсивного запроса, то сообщение об отмене операции не отправлялось для верхнеуровневого (исходного) запроса. А это часто происходит при инициализации ATAPI устройств, и как следствие - ставим UniATA и не можем загрузить систему.
  • Исправлен код реинициализации PIO/DMA режима перед передачей ATAPI команд. Как оказалось, не все безобидные на вид команды можно исполнять в DMA режиме. Даже если не требуется передача данных. Поэтому приходится для таких команд переключать устройство в PIO, а потом обратно.
  • В коде установки режимя передачи данных при проверке готовности устройства теперь не проверяется бит IDE_STATUS_ERROR, т.к. он свидетельствует только о том, что предыдущая операция завершилась с ошибкой.
  • Исправлена ошибка с неинициализированной переменной (вектор прерывания) в коде поиска старых ISA IDE контроллеров. На некоторых системах это приводило к синему экрану.
  • Из кода поиска контроллеров убран опрос подключенных устройств. Для ускорения загрузки ОС. Все равно опрос устройств инициируется системой после того, как мы сообщаем ей об обнаружении контроллера. Это было наследие исходного драйвера ATAPI.SYS, который по задумке разработчиков не должен был инициализировать контроллер при отсутствии ATAPI устройств, вместо него этим должен был заниматься ATDISK.SYS. Сейчас же это только тормозит (двойная работа все-таки).
    2006.09.05

    Release Версия 0.33d (rar/tgz) - 82.9 Kb/99.4 Kb.
    и исходники 0.33d (rar/tgz) - 175 Kb/217.4 Kb.
    Debug Версия 0.33d (rar/tgz) - 195.6 Kb/237.5 Kb.
  • Оптимизированы функции длительного ожидания готовности устройства.
  • Добавлен сброс DMA контроллера (выполняется последовательность действий для завершения DMA операции) после сброса контроллера, т.к. иначе в некоторых случаях могут возникать unexpected interrupts (при этом устройства возвращают статус IDLE).
  • Улучшена проверка источника прерывания. Во-первых обязательно проверяется BM_STATUS_INTR в регистре статуса DMA вне зависимости от того, была ли это PIO или DMA операция. Во вторых, при наличии установленого BM_STATUS_INTR игнорируется бит BUSY в регистре статуса IDE устройства, и канал переводится в состояние ожидания готовности устройства. Ранее такая ситуация считалась unexpected interrupt'ом, что не соответствует действительности. Также убрано требование отсутствия BM_STATUS_ACTIVE при наличии BM_STATUS_INTR. В случае ошибок устройства это вполне реальная комбинация и прерывание должно быть обслужено.
  • Улучшен порядок преверки каналов на готовность для многоканальных контроллеров. Теперь в первую очередь проверяются каналы, ожидающие прерывание.
  • Исправлена ошибка с парностью вызовов запрещения/разрешения прерываний при отложеной обработке (DPC, Timer DPC). Как правило, обработка откладывается на некоторое время и передается в другой поток с более низким приоритетом если требуется подождать готовности устройства.
  • Реализована возможность исполнения не ATAPI команд в DMA режиме помимо READ/WRITE BLOCK (для них это уже давно сделано).
  • Добавлена проверка статуса IDE устройства на 0xff перед отправкой очередной команды. Это значение говорит либо о повисании устройства, либо о его отсутствии.
  • Исправлен ряд ошибок со сменой начального DMA режима и в процессе работы. Где-то забыл флаг DMA операции сбросить, где-то сравнил знаковые числа как беззнаковые и т.п. Мелочи, а из-за них не все работает.
  • Добавлена проверка на готовность устройства с приему команды переключения режима передачи.
  • В atactl.exe сделаны более осмысленные сообщения об ошибках.
    2006.03.18

    Release Версия 0.32a2 (rar/tgz) - 81.9 Kb/98.5 Kb.
    и исходники 0.32a2 (rar/tgz) - 172.3 Kb/214.7 Kb.
    Debug Версия 0.32a2 (rar/tgz) - 192.2 Kb/234.5 Kb.
  • Исправлена ошибка в коде поддержки семейства nForce. Эти контроллеры отличаются от VIA и AMD тем, что адреса управляющих регистров смещены на 16 байт. В процессе эволюции для этих контроллеров из внутреннего списка поддерживаемых устройств был убран флаг NVIDIA как избыточный (все равно ведь можно по VensdorId определить). А вот в том месте, где контроллер программируется, проверка осталась старой (по флагу). В результате при подключении устройств на secondary канал контроллер просто вешался от действий драйвера (не в те регистры записали). Почему это все работало с primary каналом мне непонятно, Типа чудо :)
    2005.11.29

    Release Версия 0.32a (rar/tgz) - 81.8 Kb/98.4 Kb.
    и исходники 0.32a (rar/tgz) - 172 Kb/214.3 Kb.
    Debug Версия 0.32a (rar/tgz) - 191.5 Kb/234 Kb.
  • В atactl.exe добавлена возможность определения режима (PIO/DMA/UDMA) даже при отсутствии драйвера UniATA.
  • Начаты изменения связаные с портированием в NT3.51 (спасибо KtP) и ReactOS (спасибо Root).
  • Добавлена поддержка новых ICH6 и ICH7, а также VIA 6421.
  • Исправлена ошибка в коде поддержки nForce и nForce2. По ошибке для этих контроллеров во внутреннем списке поддерживаемых устройств был установлен флаг AMDBUG.
  • Изменены параметры инициализации (timings) для семейства HighPoint.
  • Исправлена ошибка в установке логической геометрии для больших дисков. Было 255 секторов, 63 головки, а должно быть наоборот.
  • Добавлена поддержка (точнее трансляция в из SCSI в ATA) команды SCSIOP_MEDIUM_REMOVAL для не-ATAPI устройств.
  • Исправлена ошибка в коде поддержки старых жестких дисков, которые на сбрасывают DRQ после окончания передачи данных.
  • Исправлен ряд ошибок в коде инициализации устройств. Там была путаница с наследованием ограничений скорости передачи данных в иерархии дескрипторов controller-channel-device.
  • Улучшен код переключения между режимами PIO/DMA.
    2005.10.14

    Release Версия 0.31f (rar/tgz) - 80.4 Kb/96.4 Kb.
    и исходники 0.31f (rar/tgz) - 166.9 Kb/207.4 Kb.
    Debug Версия 0.31f (rar/tgz) - 190 Kb/232.3 Kb.
  • Исправлена ошибка в .INF файле для NT4. UniATA устанавливался как System Bus Extender, а disk.sys надеялся, что загрузится хотя бы 1 SCSI miniport. В результате система не грузила disk.sys и не могла найти свой boot device. Спасибо Axxie.
  • Сделал более стандартный метод вычисления логической геометрии. Для лучшей совместимости с предыдущими версиями в Registry settings добавлена возможность указать этот метод вручную. Подробности читайте в описании параметра GeomType.
  • Вместе с Debug версией теперь идет отладочная информация в виде .PDB. Кроме того, для Release .PDB тоже автоматически создается при сборке.

    2005.04.22

    Release Версия 0.31d (rar/tgz) - 80.1 Kb/96.1 Kb.
    и исходники 0.31d (rar/tgz) - 166.2 Kb/206.7 Kb.
    Debug Версия 0.31d (rar/tgz) - 111.8 Kb/131.6 Kb.
    Исправлен еще ряд ошибок в коде обработки неправильного адреса устройства на шине.
    2005.04.09

    Debug Версия 0.31c (rar/tgz) - 111.8 Kb/131.6 Kb.
    Release Версия 0.31c (rar/tgz) - 80.1 Kb/96.1 Kb.
    и исходники 0.31c (rar/tgz) - 166.3 Kb/206.6 Kb.
    Исправлена ошибка в коде проверки правильности адреса на шине. Написал '>' вместо '>='. Как следствие - crash при обращении к несуществующему каналу N2 (это тот, что идет после N0 и N1).
    2005.04.05

    Release Версия 0.31b (rar/tgz) - 80.1 Kb/96.1 Kb.
    и исходники 0.31b (rar/tgz) - 166.1 Kb/206.5 Kb.
    Debug Версия 0.31b (rar/tgz) - 111.8 Kb/131.6 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 MAX 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 винте да еще и со старым контроллером - 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.
    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 (Compatible 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

    Предложения и исправления слать на Mail to alterX@alter.org.ua (remove X)  
    << Back Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2016