Sata driver windows 2003

Установка Windows 2003 и проблема с RAID драйверами

Установка Windows Server 2003 может стать проблемой, если драйвера для контроллера RAID находятся не на установочном компакт-диске. Вот хороший способ преодоления этого неудобства без использования флоппи-дисковода.

Хотя Windows Server 2008 стала стандартом для вновь продаваемых серверов, проблемы совместимости приложений и напряженные ИТ-бюджеты приводят к тому, что очень часто Windows Server 2003 по прежнему устанавливается на новые сервера. Проблема в этих развертывания возникает, когда вы используете новые RAID-контроллер с драйверами, которые не поставляются в комплекте с установочным диском Server 2003. Сложность проблемы, в том, что единственным способом доступа к дополнительным драйверам в ходе установки Server 2003 является дискета. Это не новость, что большинство новых серверов просто не выпускаются с дисководами.

Один из лучших путей преодоления этого является Slipstream RAID драйвера в установочном диске Windows Server 2003. Мой выбор — использование Nlite. Nlite можно скачать по адресу из http://www.nliteos.com/. После установки, вы можете скопировать ваши установочные диски на локальный компьютер, где вы работаете, импортировать RAID драйвера, которые вам нужны, и создать установочный образ ISO, который включает новые драйверы.

Nlite также имеет несколько других замечательных особенностей. Вы можете не только интегрировать драйвера RAID, вы можете интегрировать любые драйверы, которые вы пожелаете.. Наряду с этим, Nlite могут быть использованы для дальнейшего расширения вашей автоматической установки ОС для Windows Server 2003 и 2008(R2).

Sata driver windows 2003

Who and why need this driver ? Let me tell you: it worth installing UniATA if vendor of your new motherboard do not want to supply you with drivers for your old OS. Or vice versa, you have old motherboard and want to install new Windows with it. Of course, it is possible to use standard (generic) drivers those most probably supports this hardware. But what about performance ? You will have PIO mode with 0.5 — 3 Mb/sec transfer rate. UniATA shall use DMA or UltraDMA and have up to 10 times better performance. There is still one common problem with modern hard driver of more than 128 Gb capacity (also known as LBA-48 or BigLba). Old OSes do not support such drives at all, new ones require latest Service Packs. UniATA has built-in support for large drives. And at last — upgrade or downgrade of the motherboard. If you simply connect your harddisk to different motherboard, the driver of the previous one shall not recognize new IDE controller. And the system shall not boot. You will have to connect everything back, change IDE drivers to generic ones, reboot and reconnect hardware again, then change drivers to new ones. You cannot even think about walking with bootable harddrive to some other computers. Or resign yourself to have 0.5 — 3 Mb/sec transfer rate. Since UniATA supports numerous IDE controllers and in addition is capable of driving all standard (onboard primary/secondary) controllers, this problem also appears to be solved. Also, UniATA works with new SATA and AHCI controllers Below you can find more detailed and more technical feature list.

Features

  • DMA/UDMA support (up to ATA-133) on known and generic DMA on unknown controllers
  • LBA48 (large drives above 128Gb) support
  • large drives above 2Tb support (SCSI READ16, WRITE16)
  • SerialATA support (SATA, SATA-2, SATA-3)
  • AHCI rev. 0.95 — 1.30 support
  • NT3.51 (i386+ CPU), NT4, 2000, XP, 2003, 2005, Vista, 7, ReactOS (x86/i386)
  • SMP/HT support
  • support of contiguous set of modes UDMA0-UDMA6 (ATA-16/25/33/44/66/100/133)
  • Support of numerous IDE controllers and generic ATA/ATAPI
  • no reinstall required when migrating to different IDE controller or motherboard.
  • internal command queueing and optimized execution order of read/write requests
  • user-mode device management utility atactl.exe. You can change data transfer mode (PIO/DMA/UDMA) on the fly.
  • tuning Read/Write cache, transfer modes and many other things via Registry settings
  • list of bad/unreliable blocks, to prevent driver from treating HDD but return error immediately (Nikolai Vorontsov).
  • NEW SCT Command Transport support (used by smartmontools)
  • Hot swap for IDE devices under OSes prior w2k (Mike)

Plans

  • Human-friendly setup tool
  • RAID support (mirror, stripping, mirror+stripping)
  • correct PNP (WDM) implementation for w2k and higher
  • 64-bit Windows support
  • SATA-splitters support
  • Win 9x/ME support (now we have separate build with some limitation, thanks to Xeno)
  • work with BIOS INT13 (Alexei Chipovalov)
  • emulation of MODE SENSE/MODE SELECT SCSI commands on IDE devices (HDD) for managing caching, standby mode, etc. (under development)
  • old MFM HDD support (KtP)

History

After reading some specifications (for HDDs, ATAPI and ATA/IDE controllers) and looking through sources (from NT4 DDK and FreeBSD 4.3 — 4.5) the first working version — BusMaster_v8a_ok.rar/tgz (52.1 Kb/60.5 Kb) (v 0.8a). Note, that the last one is BusMaster_v46d8.rar/tgz (173 Kb/267.8 Kb) 🙂 That version (v 0.8a) successfully detected all available controllers under NT4. The first controller list was:

  1. VIA 82C586 (ETEQ) on SOYO-5EHM
  2. VIA 8233 on Soltek-DRV4
  3. CMD 649 (an additional PCI controller)

And a little later:

  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 the driver initializes any PCI device that reports itself as an IDE Controller and also the following well-known Mass-storage Controllers:

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

Check if the driver really supports all mentioned devices is rather difficult. But some compatibility matrices for some versions you can find here

Version

Present to New Year, under the Cristmass tree 🙂

  • бdded SATA/SATA-2 support for VIA, SII, SIS, INTEL (except AHCI mode), ATI, NVIDIA, SERVERWORKS, ALI. This is significant change number 1.
  • Implemeted virtual addressing for controller registers. This makes easy to add support of controllers with non-standard layout of control registers. Note, that all SATA (except AHCI) are not standard. This is significant change number 0.
  • Now drivers uses special library from DbgDump, which makes it binary-compatible with all NT OSes.
  • Added support for more than 2 channels on single controller.
  • Added check of physical addresses for 4Gb limit. But there are few controllers, those support large addresses.
    2006.12.30
    Release Version 0.33h2 (rar/tgz) — 83.3 Kb/99.8 Kb.
    and sources 0.33h2 (rar/tgz) — 175.4 Kb/218.1 Kb.
    Debug Version 0.33h2 (rar/tgz) — 196.9 Kb/240.5 Kb.
    NT3.51 Debug

    Even a year have not over since last update :).

  • At last I’ve made representation on standard dual-channel IDE controller as 2 logical devices under Win 2000 and higher. In previous versions this controller was represented as single device with 2 interrupts. Sometimes it worked, sometimes not. This is significant change number 1.
  • I’ve understand SCSIPORT deferred procedure call API, which is used in interrupt service. Appeared, that it worth using timer only. Such calls as ScsiPortNotification(CallDisableInterrupts, . ) and ScsiPortNotification(CallEnableInterrupts, . ) are not usable. They can lower IRQL and let other interrupts to be serviced. But we cannot use timer together with them. So, we have no wierd magic in this area any more 🙂 This is significant change number 2.
  • Found and fixed terrible bug in controller reset code. If reset is initiated when processing recursive device request, operation abort message is not sent to request originator. Such condition often appears during init of ATAPI devices.
  • Fixed PIO/DMA transfer mode reinit code. Appeared, that before sending some ATAPI commands we should switch device to PIO and then return it back.
  • In PIO/DMA transfer mode setup code removed check for IDE_STATUS_ERROR since it means that only previous operation have failed.
  • Fixed bug with uninitialized variable (interrupt vector) in old ISA IDE detect code. On some systems invalid value of this variable maked BSOD.
  • Removed connected devices search from controller detection code for performance reason. Anyway, device search is initiated by system when we inform OS about detected controller. This was legacy behavior from original ATAPI.SYS. It should not touch controller if there are no connected ATAPI devices found.
    2006.09.05
    Release Version 0.33d (rar/tgz) — 82.9 Kb/99.4 Kb.
    and sources 0.33d (rar/tgz) — 175 Kb/217.4 Kb.
    Debug Version 0.33d (rar/tgz) — 195.6 Kb/237.5 Kb.
  • Optimized functions of long waiting for device ready.
  • Added unconditional DMA DONE command sequence after controller reset. Otherwise in some cases we can experiance unexpected interrupt. Interesting, that devices report IDLE status, while DMA controller reports such unexpected INTR.
  • Significantly improved interrupt source detection. BM_STATUS_INTR bit in DMA status register is always checked regardless of operation type (DMA vs PIO). When BM_STATUS_INTR is set, the interrupt is definitly our regardless of BUSY bit in IDE status register. In previous varsions such condition was mistakenly treated as unexpected interrupt. Also removed requirement for cleared BM_STATUS_ACTIVE. This bit can be set along with BM_STATUS_INTR when device error occures.
  • Improved channel ready check order for multichannel controllers. Now channels those expect for interrupt are checked first.
  • Fixed bug with missmatched numbers of interrupt disable/enable calls when defered interrupt service is used (DPC, Timer DPC). Usually interrupt processing is defered whed we have to wait for device ready. In this case control is passed to thread with lower priority.
  • Implemented DMA support for non-READ/WRITE BLOCK ATAPI commands (READ/WRITE already use DMA for a long time).
  • Added check of IDE device status for 0xff value before sending command. Such value means that device have hanged or is not present.
  • Fixed several bugs with initial and on-fly DMA mode adjustment.
  • Added check for readiness of device to accept transfer mode adjustment request.
  • Added more informative error messages to atactl.exe.
    2006.03.18
    Release Version 0.32a2 (rar/tgz) — 81.9 Kb/98.5 Kb.
    and sources 0.32a2 (rar/tgz) — 172.3 Kb/214.7 Kb.
    Debug Version 0.32a2 (rar/tgz) — 192.2 Kb/234.5 Kb.
  • Fixed bug with nForce family. These controllers differs from VIA and AMDwith shifted control registers (16 bytes offset). During driver evolution I have removed NVIDIA flag from internal device list. I decided that it is unnecessary since we can check VensdorId instead. But in the place where controller is programmed old condition was left (bug. ). As result when driver attempts to program secondary channel the controller hanged (we have written somewhere ;). Why primary channel worked I don’t know. Its a kind of magic 🙂
    2005.11.29
    Release Version 0.32a (rar/tgz) — 81.8 Kb/98.4 Kb.
    and sources 0.32a (rar/tgz) — 172 Kb/214.3 Kb.
    Debug Version 0.32a (rar/tgz) — 191.5 Kb/234 Kb.
  • Now atactl.exe can determine transfer mode (PIO/DMA/UDMA) even if UniATA in not installed.
  • Porting to NT3.51 (thanks to KtP) and ReactOS (thanks to Root) has begun.
  • Added support for newest ICH6, ICH7 and VIA 6421.
  • Fixed bug with nForce Й nForce2. These controllers mistakenly had AMDBUG flag in internal list if known devices.
  • Changed timings for HighPoint family.
  • Fixed bug with bogus geometry for large HDDs. There was 255 sectors and 63 heads. Must be 63 sectors and 255 heads.
  • Added SCSIOP_MEDIUM_REMOVAL support for non-ATAPI devices (translation from SCSI to ATA).
  • Fixed bug with old HDDs those do not release DRQ after finishing data transfer.
  • Fixed several bugs with inheritance of transfer rate limit in hierarchy of descriptors controller-channel-device.
  • Improved transfer mode (PIO/DMA) switching code.
    2005.10.14
    Release Version 0.31f (rar/tgz) — 80.4 Kb/96.4 Kb.
    and sources 0.31f (rar/tgz) — 166.9 Kb/207.4 Kb.
    Debug Version 0.31f (rar/tgz) — 190 Kb/232.3 Kb.
  • Fixed bug in .INF file for NT4. UniATA was installed as System Bus Extender, but disk.sys expected at least one SCSI miniport to be loaded. As result OS did not run disk.sys and could not find boot device. Thanks to Axxie.
  • Implemented more standard method of determining logical geometry of the drive. For better compatibility with previous versions the method is controlled by Registry settings. Read about GeomType for details.
  • Now Debug build comes with Debug Information in .PDB file. During Release build .PDB is also automatically generated.

    2005.04.22
    Release Version 0.31d (rar/tgz) — 80.1 Kb/96.1 Kb.
    and sources 0.31d (rar/tgz) — 166.2 Kb/206.7 Kb.
    Debug Version 0.31d (rar/tgz) — 111.8 Kb/131.6 Kb.
    Fixed several bugs in error recovery code for invalid address of the device on ATA bus.
    2005.04.09
    Debug Version 0.31c (rar/tgz) — 111.8 Kb/131.6 Kb.
    Release Version 0.31c (rar/tgz) — 80.1 Kb/96.1 Kb.
    and sources 0.31c (rar/tgz) — 166.3 Kb/206.6 Kb.
    Fixed bug in bus address validation code. I’ve written ‘>’ instead of ‘>=’. This lead to crash when someone send request to non-existent bus (e.g. N2, which comes after N0 and N1).
    2005.04.05
    Release Version 0.31b (rar/tgz) — 80.1 Kb/96.1 Kb.
    and sources 0.31b (rar/tgz) — 166.1 Kb/206.5 Kb.
    Debug Version 0.31b (rar/tgz) — 111.8 Kb/131.6 Kb.

  • Extension in Registry settings related to supported device classes. Now it is possible to enable/disable support of PCI, ISA, ISA/PCI Compat and MCA.
  • Also for Debug purposes added option for dumping Debug messages to blue screen.
  • HiNT VXPro II is added to the list of known devices. However, it doesn work yet 🙂
    Note: do not install Debug build under Win 2000 and higher until DbgPrint Dump is installed with 2005.03.04
    Version 0.31a (rar/tgz) — 80 Kb/96 Kb.
    and sources 0.31a (rar/tgz) — 165.9 Kb/206.3 Kb.
  • Thanks to Axxie for discovering bug with uninitialized DEVICE_EXTENSION. This structure includes state variables of channels, connected devices and interrupt service routines. On most machines this memory block was allocated zero-filled. But on some ones it contained garbage.
  • I’ve also received interesting news from Mike. He have successfully run NT4+sp6a with UniATA installed on ICH4.
    2005.03.04
    Version 0.31 (rar/tgz) — 79.6 Kb/95.6 Kb.
    and sources 0.31 (rar/tgz) — 165.1 Kb/205.4 Kb.
  • Completely rewritten workaround for ATAPI devices those generate INTR without clearing BSY. Treate thanks to Root for testing.
  • Fixed bug in operation sequence for sending ATAPI command. At one place interrupt status was not cleared, and at another interrupts were enabled too early.
  • Added interrupt status clear code after controller reset.
  • Still some extensions in Registry settings.
    2005.02.20
    Debug Version 0.30i (rar/tgz) — 101.6 Kb/119.8 Kb.
    Version 0.30i (rar/tgz) — 79.2 Kb/95.2 Kb.
    and sources 0.30i (rar/tgz) — 164.2 Kb/204.5 Kb.
  • Fixed bug (too long delay) in HDD cache flushing code.
  • .INF is updated with till one patch by Root
  • Added experimantal workaround (from FreeBSD) for ATAPI devices those generate INTR without clearing BSY.
  • Added workaround for the following bug in SCSIPORT.SYS from NT4: If we attempt to initialize Compatible Mode IDE controller and SCSIPORT.SYS fails resource list check, it keeps AtDiskPrimaryAddressClaimed and/or AtDiskPrimaryAddressClaimed flag(s) set to TRUE. As result the second initialization attempt fails because UniATA driver decides that this controller is already clamed by some other driver. Thanks to Vitaliy Vorobyov aka deathsoftX@yandex.ru (remove X) for bug report and fix.
  • I’ve extended and documented Registry settings.
  • Also published special debug build with logs enabled.
    2005.02.08
    Debug Version 0.30h (rar/tgz) — 99.9 Kb/118.2 Kb.
    Version 0.30h (rar/tgz) — 78.3 Kb/94.3 Kb.
    and sources 0.30h (rar/tgz) — 162.6 Kb/202.7 Kb.
  • Removed too long waiting for device readiness in error handler.
  • Implemented HDD cache flushing in response to system shutdown request.
  • .INF is updated with patch by Root. May be this will help .INFs working properly 🙂
  • Added device reset option -r to atactl.exe. It is useful when ATAPI device hangs.
  • Published special debug build with logs enabled.
    Note: do not install this build until DbgPrint Dump is installed with 2005.01.30
    Version 0.30g (rar/tgz) — 78.2 Kb/93.8 Kb.
    and sources 0.30g (rar/tgz) — 161.5 Kb/201 Kb.
  • I’ve found and fixed rather specific bug: in some cases driver attempted to change transfer mode for some device on IDE bus while another device executed the command. In other cases similar situation appeared when new command came to the queue. The bug could be observed as complete system hang.
    On my configuration this situation could be reproduced in rather specific conditions. However, I have only 1 device on each IDE bus. My be such hang can happen on machines with 2 devices on single IDE bus much often, even during OS boot.
  • Seems, LBA48 already works fine now. And Intel ICH4 doesn’t yet 🙁
    2005.01.16
    Version 0.30e (rar/tgz) — 78.1 Kb/93.8 Kb.
    and sources 0.30e (rar/tgz) — 160.9 Kb/200.4 Kb.
    Still some fixes with LBA48 support
  • I have forgotten to set IDE_USE_LBA flag when using LBA48 addressing
  • there were no support for LBA48 version of IDE_VERIFY command. This command is used for surface check.
  • in some cases READ NATIVE MAX LBA/SET MAX LBA were not handled properly
    and one useful addon:
  • implemented atactl.exe command line utility, which can enumerate IDE, SCSI and RAID controllers and display information about connected to them devices. If UniATA driver is installed, you can change data transfer mode (PIO/DMA/UDMA) for individual IDE/ATAPI devices with atactl.exe.
  • optimized controller-specific DMA tuning code. When removing code duplicates (see usage of AtaSetTransferMode()) I have found some misscorrespondance between ATA/ATAPI device transfer mode and controller transfer mode.
    2005.01.02
    Version 0.30c (rar/tgz) — 69.8 Kb/75.1 Kb.
    and sources 0.30c (rar/tgz) — 148.6 Kb/176.8 Kb.
  • Fixed LBA48 support bug. LBA48 is addressing mode used for large capacity drives — more than 128Gb. The problem was caused by code of determining real drive capacity. Some drives report their size as 32Gb (e.g. my Seagate Barracuda IV 40) or as 128Gb (I don’t know real examples) for compatibility issues. There are special commands for retrieving real capacity and size limit removal. They are READ_NATIVE_LAST_LBA and SET_MAX_LBA. But I didn’t know, about their 48-bit clones intended for drives larger than 128Gb. So, I programmed drives to limit their capacity to 128Gb wit hold commands 🙁
    Greate thanks to Alexander Spelicyn aka spelX@mail.ru (remove X) for testing with 160Gb HDD on the old good i440BX.
  • Fixed bug with handling UNIATA_NO_DPC_ATAPI flag. This flag enables workaround for hangs with some new CD/DVD drives on CMD-649.
    2004.12.27
    Version 0.30a (rar/tgz) — 67.9 Kb/72.5 Kb.
    and sources 0.30a (rar/tgz) — 146.4 Kb/173.7 Kb.
  • Once again I have rewritten Intel ICH4 support code. Saying truth, I reverted it to very old state, when it seemed working. Let’s wait for testing result.
  • Until we have no absolutely correct and 100%-reliable interaction with ScsiPort driver, I have introduced workaround. The main idea — I try to init main Onboar IDE controller using various tricks (I wrote about these tricks before). Experiments show that this workaround helps in many cases. Also, let’s wait for results.
    2004.12.05
    Version 0.29j (rar/tgz) — 67.6 Kb/72 Kb.
    and sources 0.29j (rar/tgz) — 145.5 Kb/172.6 Kb.
  • Bug-fix in SiS controller detection code. It has very interesting algorithm. There is 1 PCI IDE Controller with instant DeviceId/VendorID. There are one or two specific Bridge Device(s). Their DeviceId/VendorId determine actual type of the IDE Controller. This behavior is similar to VIA. But some models need very specific check. We change 1 byte in PCI Config Space ot the IDE Controller and check if its DeviceId have changed (!). (Seems to me, this is not too good idea). The problem was because I have lost the line which reverts controller to initial state.
    Greate thanks to Mike for testing my buggy versions and supplying me with pretty bug-reports (181 Kb).
    So, lets try new version.
    2004.09.21
  • Still some fixes in Intel, Acer and some other controller support code. Silly bug. I put break in switch/case instead of return. As result after successfull UDMA initialization the default code was called and the device (not controller!) switched back to PIO-0.
  • Improved SiS controlelr support. Thanks to Ivano Guerra. Of course, this is beta-version and must be tested. Try Version 0.29i3 (rar/tgz) — 67.6 Kb/72 Kb.
    and sources 0.29i3 (rar/tgz) — 144.9 Kb/171.9 Kb.
    2004.09.08
    In same code for Intel ICHxxx IDE support found still one bug. Looks like that it is mine. The bug leads to data corruption. So, v29i is removed from the site.
    2004.08.26
    Version 0.29i (rar/tgz) — 144.4 Kb/171.2 Kb.
  • Found and fixed bug in Intel IDE support code. It was copied from FBSD 5.2.1 (and it is still there). Have compared the latest and some old versions and found, than 32-bit value (0x10000 Version 0.29h (rar/tgz) — 66.9 Kb/71.4 Kb.
    and sources 0.29h (rar/tgz) — 143.6 Kb/170.3 Kb.
  • Rewritten Intel IDE controller support code. I hope this will only improve compatibility. Especially for ICH4, which didn’t work with previous version.
  • Ported some new code from FBSD 5.2.1.
  • Fixed bug with include/exclude device list in Registry.
  • Implemented simplex-mode support. In this mode IDE channels do not operate simultaneously. For some controllers this mode is inevitable. Along with autodetect, you can turn the controller into simplex-mode using DWORD:ForceSimplex Registry value under HKLM\System\CurrentControlSet\Services\UniATA\Parameters Registry key or under its device-specific subkey.
  • Added support for IDE devices those report 0x40 (IDE_STATUS_DRDY) status in inactive state instead of usual 0x50 (IDE_STATUS_IDLE). Such behavior was oberved under latest VMWare release (4.5.1 build-7568). Thanks to Vitaliy for information and testing.
  • Rewritten load balancing code for separate IDE channels and devices connected to single channel.
    2004.08.01
    Version 0.29d (rar/tgz) — 62.4 Kb/66 Kb.
    and sources 0.29d (rar/tgz) — 135.9 Kb/160.1 Kb.
  • Fixed VIA 8235 and VIA 8233A init code. That was done because I have installed UniATA on one computer with VIA 8235. After that I observed a lot pretty bugs. System worked slowly and randomly crashes. It seemed like sometimes data is not correctly read from HDD. I looked into latest FBSD ata drivers and saw no changes for this controller. At the same time there are bug-reports in formus. I looked into Linux kernel and found that for VIA 8235 and VIA 8233A PCI register 0x4c is not programmed. I did the same. Unfortunately, I cannot check if it works on that machine.
  • During code review I found that I made a mistake when porting SiS support code from FBSD. The bug affected on secondary channel’s UDMA mode register. Also fixed.
    2004.06.05
    Version 0.29c (rar/tgz) — 61.6 Kb/65.2 Kb.
    and sources 0.29c (rar/tgz) — 133.9 Kb/157.9 Kb.
  • Fixed VIA 8235 and VIA 8233A init code. That was done because I have installed UniATA on one computer with VIA 8235. After that I observed a lot pretty bugs. System worked slowly and randomly crashes. It seemed like sometimes data is not correctly read from HDD. I looked into latest FBSD ata drivers and saw no changes for this controller. At the same time there are bug-reports in formus. I looked into Linux kernel and found that for VIA 8235 and VIA 8233A PCI register 0x4c is not programmed. I did the same. Unfortunately, I cannot check if it works on that machine.
  • During code review I found that I made a mistake when porting SiS support code from FBSD. The bug affected on secondary channel’s UDMA mode register. Also fixed.
    2004.06.02
    Version 0.29a (rar/tgz) — 61.1 Kb/64.7 Kb.
    and sources 0.29a (rar/tgz) — 133.5 Kb/157.5 Kb.
  • Added code for a lot of new controllers. Mostly for SiS and Promese.
  • Implemented device/vendor-specific Registry settings.
    You can create the following sub-keys with parameters under HKLM\System\CurrentControlSet\Services\UniATA.
    Paramaters — The most global settings.
    Paramaters\Ven_VVVV — where VVVV is Vendor ID (see. PCI Dump)
    Paramaters\Ven_VVVV\Dev_DDDD, where DDDD is Device Id. See the same place.
    Paramaters\Ven_VVVV\Dev_DDDD\Slot_XXXXXXXX, where XXXXXXXX is PCI address in 32-bit form (HEX).
    In general it would be pretty to create configuration utility.
  • Implemented Include/Exclude options. Now you can create Inlude or Exclude DWORD value under Registry key, described above to Enable/Disable UniATA support for specified controller.
    2004.04.08
    Version 0.29b (rar/tgz) — 61.5 Kb/65.1 Kb.
    and sources 0.29b (rar/tgz) — 133.8 Kb/157.8 Kb.
  • Fixed some issues in OEMSETUP.INF and TXTSETUP.OEM. After that UniATA was successfully added during text-mode w2k setup phase. Then w2k was installed on HDD connected to CMD649 IDE controlled. Note, w2k doesn’t support it itself. So, I decided that these setup files are correct now. Enjoy.
    2004.05.19
    Version 0.28 (rar/tgz) — 58.3 Kb/61.8 Kb.
    and sources 0.28 (rar/tgz) — 127.2 Kb/149.1 Kb.
  • Fixed bug with interrupt enable/disable routines. They worked with Primary channel only.
  • At least we removed dependence on ScsiPort DMA support API. Now UniATA translates virtual addresses to physical itself. This give 2 advantages: 1) No hackar’s init methods needed (ISA bridged controllers was initialized as PCI and this method worked not on all machines). 2) No more copying data between DMA buffer and user buffer.
    2004.02.24
    Version 0.27a (rar/tgz) — 58.2 Kb/61.9 Kb.
    and sources 0.27a (rar/tgz) — 124.7 Kb/147.6 Kb.
  • Fixed error handling code for ATAPI devices (CD-ROM/RW, etc.). On some devices we must wait for DRQ bit assertion if an error occured.
    2004.01.20
    Version 0.27 (rar/tgz) — 58.3 Kb/61.8 Kb.
    and sources 0.27 (rar/tgz) — 125.5 Kb/147.1 Kb.
  • Thanks to Vitaliy Vorobyov aka deathsoftX@yandex.ru (remove X).
    Fixed initialization code for NT4+SP6a
  • Thanks to Vitaliy Vorobyov again, for rewriting installation INT. file for NT4
  • Interrupt service (ISR) code, that uses delays is moved to deparate thread (DPC).
    2004.01.16
    Version 0.26c (rar/tgz) — 55.8 Kb/59 Kb.
    and sources 0.26c (rar/tgz) — 120.7 Kb/141.4 Kb.
  • Fixed bug with DMA error handling. Previous versions deadly hanged the system if such error occured. The experiment shown, that after DMA CRC error we should wait for drive readiness before retry.
    Special thanks to Alex Y. Matiash for bug-report
  • Fixed interrupt handler for CMD 649 and CMD 648 controllers
    2003.12.26
    Version 0.26 (rar/tgz) — 55.7 Kb/59 Kb.
    and sources 0.26 (rar/tgz) — 119.3 Kb/140 Kb.
  • Promise and HighPoint RAID support is now disabled by default, because we don’t support RAID-arrays yet.
    It is possible to enable support for these controllers in standard (non-RAID) dual-channel mode:
  • New utility for w2k .INF-file reconstruction is added to distribution. It scans PCI bus for compatible, but not listed IDE controllers. If such controllers are added, they are inserted into .INF-file.
    2003.09.23
    Version 0.26b (rar/tgz) — 55.8 Kb/59 Kb.
    and sources 0.26b (rar/tgz) — 120.6 Kb/141.2 Kb.
  • Fixed bug with DMA mode on some types of CD-ROMs
    2003.11.08
    Version 0.25f (rar/tgz) — 36.9 Kb/38.6 Kb.
    and sources 0.25f (rar/tgz) — 100.6 Kb/119.1 Kb.
    2003.09.12
    Version 0.25e (rar/tgz) — 164.3 Kb/200.1 Kb.
  • Fixed bug with invisibility of the 2nd IDE channel on onboard controller. The trouble was because NT4 allows initialization of 2 PCI devices with the same address on PCI bus, but with different system resource usage (I/O ranges and IRQ). W2k doesn’t permit such tricks. Thus I use single device thet handles 2 IRQs under this OS.
  • AdapterControl fuctionality is added. It is used by OS to enable/disable controller interrupts under w2k and higher.
  • Tests show, that PnP functionality doesn’t work yet under w2k. The main difficulty lays in the following: for PnP support we must create a list of all supported devices in Registry and installation .INF file. It is not compatible with the idea of universal driver. Probably the utilities for dynamic Registry and/or .INF file update will be created. Also probably 2 services using the same uniaata.sys would be created:
    — one of them will operate in PnP mode with fixed (from OS’s point of view) set of known devices
    — onother will be started in Legacy mode to handle all other recognizable controllers
    2003.09.01
    Version 0.25a (rar/tgz) — 157.5 Kb/192.6 Kb.
  • I’ve found that problem with onboard controllers was caused by PciIde.sys, which handles such controllers. Thus a simple installation BAT-file was created. It simply copies UniATA.sys, creates neccessary Keys in Registry and disabled PciIde driver.
    Now it works under w2k .
  • Readme files are created for different platforms: w2k (readme_w2k.txt) and NT4 (readme_nt4.txt). Old version of NT4 readme is now called readme_nt4_old.txt. These files are moved to XXX_Dist directories.
    2003.08.24
    I’ve found, that even rahter old versions work under w2k. But with some restrictions: OS doesn’t allow us to handle onboard (Compatible Mode) IDE, because in w2k IDE has its own miniport driver that differs from SCSI miniport. Now I’m thinking about the way of cheating the system to allow my driver representing Compatible Mode IDE controllers as SCSI devices.
    2003.07.12
    Version 0.25 (rar/tgz) — 155.2 Kb/187.5 Kb.
  • Acard and nForce2 IDE DMA controllers support is added.
  • Fixed bug with Promise IDE DMA support code.
  • DMA mode check is added before accessing controller registers 2003.06.03
    Version 0.24 (rar/tgz) — 153.1 Kb/185.2 Kb.
  • Disabled DMA for ATAPI devices on ServerWorks controllers. It doesn’t work 🙁
  • Fixed bug with very old HDDs those don’t support SET_GEOMETRY feature.
  • Fixed bug with using DWordIO (32bit) on very old HDDs those report such capability, but can’t operate in this mode
  • I tried to run this under w2k. It doesn’t work. 2003.02.15
    Version 0.23e (rar/tgz) — 152.8 Kb/184.9 Kb.
  • Code for handling some unusual devices (Yamaha-CRW2100) those like generating Unexpected Interrupt durring initialization process. (They do it a little later than I expected).
    2002.11.25
    Version 0.23d (rar/tgz) — 152.8 Kb/184.9 Kb.
  • Fixed bug in .INF file
  • .INF files together with uniata.sys are moved to Debug_Dist and Release_Dist directories
  • new target PKG with parameter VER is added to idedma.mak. For example, current version with Dist directories was build using the following command:
    nmake PKG VER=»23d_ok»
  • new installation instruction can be found inside archive.
    2002.11.14
    Version 0.23c (rar/tgz) — 155.4 Kb/188.9 Kb.
  • I’ve fixed a very big and fat bug, that could bring the computer down when executing DSC-restrictive commands (Such as SEEK, PLAY_CD, immediate LOAD/UNLOAD, etc.). Is was found on attempt to play Audio-CD. This bug could also lead to non-oparated state of dual-channel controllers. (when both channels are visible via single PCI device).
  • .INF files are moved to Debug and Release directories for corresponding build installation.
    2002.11.04
    Version 0.23 (rar/tgz) — 147.3 Kb/176.6 Kb.
    But you should not use it. It is buggy ;). There is better one: 0.23b BusMaster_v23b_ok.rar/tgz (148.9 Kb/198.7 Kb) It is good enough, but I’ve not publish it yet.
    Already done. Here it is: BusMaster_v23b_ok.rar
  • Controllers initialization code is optimizad for minimal size.
  • I’ve created independent command queues for Master and Slave devices. Now command reordering is performed separately for each device, thus, it is more efficient. The queue to be serviced for the next time is chosen according to special algorithm. Currently it looks at queue size only, but I’m going to make something more clever in nearest future.
  • Installation .INF file is added (in Dist directory) 2002.10.11(29)
    Version 0.22b (rar/tgz) — 146.1 Kb/173.5 Kb.
    It is a little less buggy
  • VIA-compatible chipset initialization code has been fixed. Now we handle the case of an unknown Revision Id properly.
  • Controller list initialization code has been fixed. There were a bug with NULL-pointers.
  • I’ve implement ‘human-friendly’ 😉 algorithm of transfer rate slow-down when we have too high CRC Error-rate. Now driver don’t switch device to PIO mode immediately. It probes slower modes until suitable one is found. The mode is assumed to be suitable if it shows much better results. If such mode can be found the device is switched to use this mode permanently. This technology solves problem with 40-cond. cables instead of 80-cond. one for UDMA66+ capable devices those don’t set cable type bit properly in IDENTIFY_INFORMATION. 2002.10.10
    Wow again! I’ve got new version BusMaster_v21d_ok.rar/tgz (87.8 Kb/108.2 Kb) (v 0.21d). I would be thankful to everyone who takes it for testing and tell me where it works and where it doesn’t.
  • DMA/UDMA support for ATAPI devices is added.
  • The technology of working with controllers those have 2 channels available via single PCI device was dramatically changed. NT designers assumed that device can’t interrupt until its previous interrupt is serviced. Thus, we can’t programm one channel until transfer is completed on another channel. I’ve used a kind of workaround. (New DeviceObject connected to the same interrupt is created. It receives and queues interrupts from another channel).
  • IO request queue sorting by LBA is implemented. Huge directory tree scan works about 8% faster (6.00 min -> 5.30) even in multithread tests with different start directories. I’ve also tried transfer rates for simple copy, but the results were unstable. The experiments with sorting algorithm will go on. 2002.09.16
    Wow! I’ve got working version BusMaster_v13b_ok.rar/tgz (97.4 Kb/112.6 Kb) (v 0.13b). that understand what is DMA.
  • DMA Engine is enabled and works now.
  • Some minor bugs in Primary/Secondary initialization on a single controller are fixed.
  • Generic DMA (Single Word DMA, mode 0) support is added for the case when other DMA modes can’t be initialized (for ex. on unknown controller model). According to IDE BusMaster specification, the controller must automatically stitch to this mode after power on or reset.
  • Device response wait timeout was changed from 5 to 0.05 sec in interrupt handler. It is wrong — blocking interrupts / thread switching when device hangs. Especially because it is possible (and even recomended by Microsoft) to avoid such waits. 2002.06.25
    Version 0.9 (rar/tgz) — 54.1 Kb/62.1 Kb.
  • New (I think, ideologically right) algorithm of device search and initialization is implemented.
  • Some bugs with initialization of MasterIde controller (this is one that is onboard and usually works via ISA-to-PCI bridge). I was surprised that we can’t communicate with it via PCI bus. Though it is visible there, neither IRQ nor IO-range is allocated (I suspect it was done for some kind of compatibility) We should use the following standard (predefined) IRQ/IO-ranges instead:
      Primary channel — IRQ 14 / IO 0x1f0
      Secondary channel — IRQ 15 / IO 0x170

    2002.06.01

    I’ve found an interesting thing: some HDDs (in particular my Seagate Barracuda ATA 4) report their capacity as 32Gb by default. Thus, we should use special command to determine its right capacity (see ATA specifications, keyword=»READ/SET NATIVE MAX LBA»)

    Читайте также:  Как работает терминал линукс
  • Оцените статью