| 1 | ==================================================================== | 
|---|
| 2 | eComStation AHCI Driver | 
|---|
| 3 | ==================================================================== | 
|---|
| 4 |  | 
|---|
| 5 |  | 
|---|
| 6 | Introduction | 
|---|
| 7 | ============ | 
|---|
| 8 |  | 
|---|
| 9 | OS2AHCI is an AHCI driver for eComStation. It supports both ATA and | 
|---|
| 10 | ATAPI devices in a single driver, thus there's no need for an | 
|---|
| 11 | ATAPI/CDROM filter driver. | 
|---|
| 12 |  | 
|---|
| 13 |  | 
|---|
| 14 | Copyrights | 
|---|
| 15 | ========== | 
|---|
| 16 |  | 
|---|
| 17 | Copyright (c) 2011 thi.guten Software Development | 
|---|
| 18 | Copyright (c) 2011-2013 Mensys B.V. | 
|---|
| 19 | Copyright (c) 2013 David Azarewicz | 
|---|
| 20 |  | 
|---|
| 21 | Authors: Christian Mueller, Markus Thielen | 
|---|
| 22 |  | 
|---|
| 23 | Parts copied from/inspired by the Linux AHCI driver; | 
|---|
| 24 | those parts are (c) Linux AHCI/ATA maintainers | 
|---|
| 25 |  | 
|---|
| 26 | This program is free software; you can redistribute it and/or modify | 
|---|
| 27 | it under the terms of the GNU General Public License as published by | 
|---|
| 28 | the Free Software Foundation; either version 2 of the License, or | 
|---|
| 29 | (at your option) any later version. | 
|---|
| 30 |  | 
|---|
| 31 | This program is distributed in the hope that it will be useful, | 
|---|
| 32 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 33 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
| 34 | GNU General Public License for more details. | 
|---|
| 35 |  | 
|---|
| 36 | You should have received a copy of the GNU General Public License | 
|---|
| 37 | along with this program; if not, write to the Free Software | 
|---|
| 38 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, | 
|---|
| 39 | MA  02111-1307  USA | 
|---|
| 40 |  | 
|---|
| 41 |  | 
|---|
| 42 | Licensing and Source Code | 
|---|
| 43 | ========================= | 
|---|
| 44 |  | 
|---|
| 45 | The *binary* delivery of OS2AHCI.ADD as obtained from ecomstation.nl, | 
|---|
| 46 | or as part of packaged eComStation releases, is licensed to run with | 
|---|
| 47 | eComStation only. | 
|---|
| 48 |  | 
|---|
| 49 | The source code can be retrieved from http://svn.ecomstation.nl; | 
|---|
| 50 | in compliance to the GNU General Public License, the source code | 
|---|
| 51 | can of course be modified/compiled to run on other products as long | 
|---|
| 52 | as modifications will also be published as outlined in the GNU GPL2. | 
|---|
| 53 |  | 
|---|
| 54 | Please note that builds other than the official binary delivered as | 
|---|
| 55 | part of eComStation releases or downloaded from ecomstation.nl are | 
|---|
| 56 | not officially supported by Mensys. | 
|---|
| 57 |  | 
|---|
| 58 |  | 
|---|
| 59 | Building The Driver | 
|---|
| 60 | ------------------- | 
|---|
| 61 |  | 
|---|
| 62 | The toolchain required for compilation consists of: | 
|---|
| 63 |  | 
|---|
| 64 | - IBM OS/2 DDK version 9.23 or later (see ddk\base\h\version.mak) | 
|---|
| 65 | and that has been updated for SMP systems. (Used for include files) | 
|---|
| 66 | - Open Watcom C/C++ package | 
|---|
| 67 | (available from: http://www.openwatcom.org/index.php/Downloads) | 
|---|
| 68 | - WCC 16-bit C Compiler (part of the Open Watcom package) | 
|---|
| 69 | - WASM Assembler (part of the Open Watcom package) | 
|---|
| 70 | - WLINK Linker (part of the Open Watcom package) | 
|---|
| 71 | - MAPSYM (part of the DDK) | 
|---|
| 72 |  | 
|---|
| 73 | Define DDK and WATCOM in the environment. | 
|---|
| 74 | Use "wmake" or "wmake -a" to build the driver. See _build.cmd. | 
|---|
| 75 |  | 
|---|
| 76 | Installation | 
|---|
| 77 | ============ | 
|---|
| 78 |  | 
|---|
| 79 | - Run the included update.cmd, | 
|---|
| 80 | or copy the driver file, OS2AHCI.ADD, to \OS2\BOOT on your boot disk. | 
|---|
| 81 |  | 
|---|
| 82 | - Add the following line to CONFIG.SYS: | 
|---|
| 83 | BASEDEV=OS2AHCI.ADD | 
|---|
| 84 |  | 
|---|
| 85 |  | 
|---|
| 86 | Reporting Problems | 
|---|
| 87 | ================== | 
|---|
| 88 |  | 
|---|
| 89 | If you have problems with this driver, please read the Troubleshooting | 
|---|
| 90 | page at: | 
|---|
| 91 |  | 
|---|
| 92 | http://svn.ecomstation.nl/ahci/wiki/Troubleshooting | 
|---|
| 93 |  | 
|---|
| 94 | You can open a ticket at: | 
|---|
| 95 | http://svn.ecomstation.nl/ahci | 
|---|
| 96 |  | 
|---|
| 97 |  | 
|---|
| 98 | Driver Command Line Options | 
|---|
| 99 | =========================== | 
|---|
| 100 |  | 
|---|
| 101 | Global Options | 
|---|
| 102 |  | 
|---|
| 103 | Option                 Description | 
|---|
| 104 | ------------------------------------------------------------------------------ | 
|---|
| 105 | /b:<baud>              Initialize the COM port to the specified baud rate. Allowable | 
|---|
| 106 | baud values are: 300, 600, 1200, 2400, 4800, 9600, 19200, | 
|---|
| 107 | 38400, 57600, and 115200. /b has no effect if /c is not also | 
|---|
| 108 | specified. If /b is not specified, the COM port is not | 
|---|
| 109 | initialized. For example, if you are using the kernel debugger, | 
|---|
| 110 | the kernel debugger initializes the COM port so you should not | 
|---|
| 111 | use this switch. | 
|---|
| 112 |  | 
|---|
| 113 | /c:<n>                 Set debug COM port base address. Values for n can be: | 
|---|
| 114 | 1 = COM1 | 
|---|
| 115 | 2 = COM2 | 
|---|
| 116 | a hex value (COM port base address) COM1=3f8, COM2=2f8 | 
|---|
| 117 | The default is 0. If set to 0 then no output goes to the COM port. | 
|---|
| 118 |  | 
|---|
| 119 | /d[:n]                 Debug output to COM port/trace buffer. Values for n can be: | 
|---|
| 120 | 1 = requests | 
|---|
| 121 | 2 = detailed | 
|---|
| 122 | 3 = verbose, including MMIO operations | 
|---|
| 123 | If :n is not specified the debug level is incremented for | 
|---|
| 124 | each /d specified. | 
|---|
| 125 |  | 
|---|
| 126 | /w                     Allows the trace buffer to wrap when full. | 
|---|
| 127 |  | 
|---|
| 128 | /v[:n]                 Display informational messages during boot. Values for n can be: | 
|---|
| 129 | 1 = Display sign on banner | 
|---|
| 130 | 2 = Display adapter information | 
|---|
| 131 | If :n is not specified the verbosity level is incremented for | 
|---|
| 132 | each /v specified. | 
|---|
| 133 |  | 
|---|
| 134 | /g:<vendor>:<device>   Add generic PCI ID to list of supported AHCI adapters | 
|---|
| 135 | (e.g. /g:8086:2829) | 
|---|
| 136 |  | 
|---|
| 137 | /t                     Perform thorough PCI ID scan; default = on, can be | 
|---|
| 138 | turned off with /!t to perform only a PCI class scan | 
|---|
| 139 |  | 
|---|
| 140 | /f                     Force the use of the HW write cache when using NCQ | 
|---|
| 141 | commands; see "Native Command Queuing" below for | 
|---|
| 142 | further explanation (default = off) | 
|---|
| 143 |  | 
|---|
| 144 | /r                     Reset ports during initialization (default = on) | 
|---|
| 145 | Can be turned off with /!r, however, when the | 
|---|
| 146 | [Intel] AHCI controller was found to be | 
|---|
| 147 | initialized by the BIOS in SATA mode, ports will | 
|---|
| 148 | always be reset even when /!r was specified | 
|---|
| 149 |  | 
|---|
| 150 | /a:n                   Set adapter to n for adapter-specific options | 
|---|
| 151 | (default = -1, all adapters) | 
|---|
| 152 |  | 
|---|
| 153 | /p:n                   Set port to n for port-specific options | 
|---|
| 154 | (default = -1, all ports) | 
|---|
| 155 |  | 
|---|
| 156 | /i                     Ignore current adapter if no port has been specified. | 
|---|
| 157 | Otherwise, ignore the current port on the current adapter. | 
|---|
| 158 |  | 
|---|
| 159 | Port-specific Options | 
|---|
| 160 |  | 
|---|
| 161 | Option                 Description | 
|---|
| 162 | ------------------------------------------------------------------------------ | 
|---|
| 163 | /s                     Enable SCSI emulation for ATAPI units (default = on) | 
|---|
| 164 | SCSI emulation is required for tools like cdrecord. | 
|---|
| 165 |  | 
|---|
| 166 | /n                     Enable NCQ (Native Command Queuing) for hard disks | 
|---|
| 167 | (default = off) | 
|---|
| 168 |  | 
|---|
| 169 | /ls                    Set link speed (default = 0): | 
|---|
| 170 | 0 = maximum, | 
|---|
| 171 | 1 = limit to generation 1 | 
|---|
| 172 | 2 = limit to generation 2 | 
|---|
| 173 | 3 = limit to generation 3 | 
|---|
| 174 |  | 
|---|
| 175 | /lp                    Set link power management (default = 0): | 
|---|
| 176 | 0 = full power management, | 
|---|
| 177 | 1 = transitions to "partial slumber state" disabled, | 
|---|
| 178 | 2 = transitions to "slumber state" disabled, | 
|---|
| 179 | 3 = transitions to both partial and slumber states disabled | 
|---|
| 180 |  | 
|---|
| 181 | /4                     Force track size to be 56 sectors regardless of the | 
|---|
| 182 | reported disk geometry to optimize partition boundaries | 
|---|
| 183 | for hard disks with 4096 byte sectors. | 
|---|
| 184 |  | 
|---|
| 185 | Port-specific options depend on the currently active adapter | 
|---|
| 186 | and port selector (/a and /p). Those selectors are -1 per default | 
|---|
| 187 | which means "all" adapters/ports. The scope can be reduced by limiting | 
|---|
| 188 | it to an adapter (/a) or an adapter and a port (/a and /p). The scope | 
|---|
| 189 | can be reset by setting the corresponding option back to -1. | 
|---|
| 190 |  | 
|---|
| 191 | For example: | 
|---|
| 192 |  | 
|---|
| 193 | BASEDEV=OS2AHCI.ADD /n /a:0 /p:5 /!n /a:1 /p:-1 /!n | 
|---|
| 194 |  | 
|---|
| 195 | This has the following effect: | 
|---|
| 196 |  | 
|---|
| 197 | - Enable NCQ for all hard disks | 
|---|
| 198 | - Disable NCQ for hard disk on adapter #0, port #5 | 
|---|
| 199 | - Disable NCQ for all hard disks on adapter #1 | 
|---|
| 200 |  | 
|---|
| 201 |  | 
|---|
| 202 | Native Command Queuing | 
|---|
| 203 | ====================== | 
|---|
| 204 |  | 
|---|
| 205 | Native Command Queuing (NCQ) is a feature which allows sending multiple I/O | 
|---|
| 206 | requests to hard disks before waiting for any of the requests to complete, | 
|---|
| 207 | much like Tagged Command Queuing for SCSI devices. This allows the disks | 
|---|
| 208 | to reorder I/O requests to minimize head movements, resulting in improved | 
|---|
| 209 | performance when executing random I/Os. In practice, this will be most | 
|---|
| 210 | noticable when multiple programs request I/O services to different parts | 
|---|
| 211 | of the disk -- a single program typically won't queue up I/O's but instead | 
|---|
| 212 | will wait for each I/O to complete (with the exception of programs like | 
|---|
| 213 | database servers). | 
|---|
| 214 |  | 
|---|
| 215 | While we believe NCQ will work with the majority of controllers and hard | 
|---|
| 216 | disks, it's currently turned off by default until we have more feedback | 
|---|
| 217 | from eComStation users. In order to turn on NCQ, just add the command line | 
|---|
| 218 | option "/n" to OS2AHCI.ADD. | 
|---|
| 219 |  | 
|---|
| 220 | NCQ and HW Caches | 
|---|
| 221 | ----------------- | 
|---|
| 222 |  | 
|---|
| 223 | In NCQ mode, OS2AHCI supports a request flag which allows upstream code | 
|---|
| 224 | (e.g. file systems) to force writes to go directly to the disk instead | 
|---|
| 225 | of being buffered in the HW disk cache. However, at least JFS doesn't | 
|---|
| 226 | support this flag properly which effectively disables the HW disk cache | 
|---|
| 227 | for write operations across the board, resulting in a substantial | 
|---|
| 228 | performance loss. In order to prevent OS2AHCI from disabling the HW | 
|---|
| 229 | cache when so requested by upstream code, please use the command line | 
|---|
| 230 | option "/f". | 
|---|
| 231 |  | 
|---|
| 232 | This may, of course, result in data loss in case of power failures but | 
|---|
| 233 | apparently this was the situation with previous IDE drivers as well thus | 
|---|
| 234 | shouldn't make much difference in the field. The JFS code also seems to | 
|---|
| 235 | imply that this flag has never been widely supported by [IDE] drivers; | 
|---|
| 236 | otherwise, the JFS developers should have stumbled over the performance | 
|---|
| 237 | loss a long time ago and fixed the code. | 
|---|
| 238 |  | 
|---|
| 239 | NOTES: | 
|---|
| 240 |  | 
|---|
| 241 | - Without NCQ, OS2AHCI behaves like former IDE drivers, i.e. the HW | 
|---|
| 242 | cache will always be enabled (on modern disks). | 
|---|
| 243 |  | 
|---|
| 244 | - When suspending, rebooting or shutting down, OS2AHCI always flushes | 
|---|
| 245 | the HW disk cache regardless of the "/f" or "/n" command line options. | 
|---|
| 246 |  | 
|---|
| 247 |  | 
|---|
| 248 | Interoperability With IDE Drivers | 
|---|
| 249 | ================================= | 
|---|
| 250 |  | 
|---|
| 251 | There are three kinds of IDE/ATA/SATA controllers: | 
|---|
| 252 |  | 
|---|
| 253 | 1. Legacy controllers (IDE or SATA) without AHCI support | 
|---|
| 254 | This kind of controller will only be recognized by IDE drivers | 
|---|
| 255 | (IBM1S506.ADD or DANIS506.ADD). | 
|---|
| 256 |  | 
|---|
| 257 | 2. AHCI-capable controllers which supports IDE/SATA legacy interfaces | 
|---|
| 258 | This kind of controller will work with IDE or AHCI drivers and it's | 
|---|
| 259 | up to the user to decide which driver to use. | 
|---|
| 260 |  | 
|---|
| 261 | 3. AHCI-only controllers | 
|---|
| 262 | This kind of controller will only be recognized by OS2AHCI. | 
|---|
| 263 |  | 
|---|
| 264 | If there's a mix of controllers of types 1 and 3, both an IDE and an AHCI | 
|---|
| 265 | driver will be required. | 
|---|
| 266 |  | 
|---|
| 267 | If type 2 controllers are involved, it's up to the user to decide which | 
|---|
| 268 | driver to use. Both DANIS506.ADD and OS2AHCI.ADD will verify whether another | 
|---|
| 269 | driver has already allocated the corresponding adapter, thus the only | 
|---|
| 270 | decision to take for mixed configurations is whether type-2 controllers | 
|---|
| 271 | should be handled by DANIS506.ADD or OS2AHCI.ADD and this can be done by | 
|---|
| 272 | having the desired driver's BASEDEV statement coming first in CONFIG.SYS. | 
|---|
| 273 |  | 
|---|
| 274 | NOTE: Older versions of DANIS506.ADD did not verify whether the resources | 
|---|
| 275 | of a particular adapter were already allocated by another driver. | 
|---|
| 276 | DANIS506.ADD 1.8.8 or later is required for this to work. | 
|---|
| 277 |  | 
|---|
| 278 | When using earlier versions of DANI1S506.ADD, the options "/A:x /I" | 
|---|
| 279 | will be required to tell DANI1S506.ADD to ignore adapters to be | 
|---|
| 280 | driven by OS2AHCI.ADD. The same applies to IBM1S506.ADD | 
|---|
| 281 |  | 
|---|
| 282 | Mixed Controller Example | 
|---|
| 283 | ------------------------ | 
|---|
| 284 |  | 
|---|
| 285 | Assume a DELL D630 or a Thinkpad T60. The hard disk is attached to the | 
|---|
| 286 | SATA/AHCI controller of the ICH-7 hub while the CDROM is attached to the | 
|---|
| 287 | legacy PATA IDE controller. This allows two different configurations: | 
|---|
| 288 |  | 
|---|
| 289 | 1. Drive HDD and CDROM via DANIS506.ADD | 
|---|
| 290 | 2. Drive HDD via OS2AHCI.ADD and CDROM via DANI1S506.ADD | 
|---|
| 291 |  | 
|---|
| 292 | OS2AHCI.ADD can't drive the CDROM because it's attached to a legacy PATA | 
|---|
| 293 | IDE controller which doesn't support AHCI. | 
|---|
| 294 |  | 
|---|
| 295 | - If OS2AHCI.ADD comes first in CONFIG.SYS, it will take over the SATA/AHCI | 
|---|
| 296 | controller and drive the HDD. DANIS506.ADD will take care of the PATA/IDE | 
|---|
| 297 | controller for the CDROM. | 
|---|
| 298 | - If DANIS506.ADD comes first in CONFIG.SYS, it will take over both the | 
|---|
| 299 | SATA/AHCI and the PATA/IDE controller and OS2AHCI.ADD will silently exit. | 
|---|
| 300 |  | 
|---|
| 301 | Advantages of AHCI | 
|---|
| 302 | ------------------ | 
|---|
| 303 |  | 
|---|
| 304 | The interfaces provided by the various [Intel] controllers could be | 
|---|
| 305 | summarized like this (the term ATA as driver interface being a bit of our | 
|---|
| 306 | own invention): | 
|---|
| 307 |  | 
|---|
| 308 | - Intel PIIX: IDE (I/O registers) and ATA (taskfile) | 
|---|
| 309 | - Intel ICH6: IDE (I/O registers), ATA (taskfile) and SATA | 
|---|
| 310 | (FIS, vendor-specific) | 
|---|
| 311 | - Intel ICH7: IDE (I/O registers), ATA (taskfile), SATA | 
|---|
| 312 | (FIS, vendor-specific) and AHCI (FIS) | 
|---|
| 313 | - Intel PCH: AHCI (FIS) | 
|---|
| 314 |  | 
|---|
| 315 | Taskfiles are regions in memory with ATA commands which the IDE/ATA | 
|---|
| 316 | controller can read and process autonomously. FIS (Frame Information | 
|---|
| 317 | Structures) are pretty much the same but they are specific to the SATA | 
|---|
| 318 | communication protocol on the serial link. The most important FIS type | 
|---|
| 319 | for AHCI drivers is the H2D (host to device) FIS which basically contains | 
|---|
| 320 | the ATA command to be executed. | 
|---|
| 321 |  | 
|---|
| 322 | The big advantage of AHCI controllers, apart from being vendor-neutral, | 
|---|
| 323 | is that they take care of a lot of things which previous-generation | 
|---|
| 324 | drivers like DANI1S506 would have to do step by step. For example, in | 
|---|
| 325 | order to send an ATAPI command, DANIS506 would have to do the following: | 
|---|
| 326 |  | 
|---|
| 327 | * Send ATA "PACKET" command to device (via IDE registers, ATA taskfiles | 
|---|
| 328 | or SATA FIS) | 
|---|
| 329 | * Wait until device signals via interrupt it's ready for the ATAPI command | 
|---|
| 330 | * Send ATAPI command to device via PIO | 
|---|
| 331 | * Wait until device signals via interrupt it's ready to transfer data | 
|---|
| 332 | * Send/Receive any data that might come along with the ATAPI command via | 
|---|
| 333 | PIO, or wait for DMA transfer to complete | 
|---|
| 334 | * Wait until device signals via interrupt that command and data transfer | 
|---|
| 335 | have completed | 
|---|
| 336 |  | 
|---|
| 337 | For OS2AHCI, the same operation looks like this: | 
|---|
| 338 |  | 
|---|
| 339 | * Fill in AHCI command header, FIS with ATA "PACKET" command and the ATAPI | 
|---|
| 340 | command | 
|---|
| 341 | * Tell port engine to process the command | 
|---|
| 342 | * Wait until controller signals via interrupt that command and data | 
|---|
| 343 | transfer have completed | 
|---|
| 344 |  | 
|---|
| 345 | The AHCI controller automatically takes care of all underlying bits and | 
|---|
| 346 | pieces. OS2AHCI doesn't even have to know whether a particular message is | 
|---|
| 347 | sent via PIO or DMA because this is handled by the AHCI controller, too. | 
|---|
| 348 | And the whole concept of PIO and DMA is only relevant between AHCI controller | 
|---|
| 349 | and the device -- all transfers between OS2AHCI and the AHCI controller are | 
|---|
| 350 | always done via DMA. | 
|---|
| 351 |  | 
|---|
| 352 |  | 
|---|
| 353 | SMART Support | 
|---|
| 354 | ============= | 
|---|
| 355 |  | 
|---|
| 356 | Starting with version 1.22, OS2AHCI supports the IOCTL interface required by | 
|---|
| 357 | existing SMART monitoring tools. Since those tools are hard-coded to open | 
|---|
| 358 | the character device named "IBMS506$", they will not work with OS2AHCI unless | 
|---|
| 359 | modified to open the OS2AHCI$ device. Previous versions of OS2AHCI used to | 
|---|
| 360 | register register a duplicate device with the IBMS506$ name, however since | 
|---|
| 361 | that caused so many unacceptable problems, that is no longer done. You must | 
|---|
| 362 | have a SMART utility that opens the OS2AHCI$ device to access the AHCI driver. | 
|---|
| 363 |  | 
|---|
| 364 | A patched version of the smartctl.exe program is included in the OS2AHCI | 
|---|
| 365 | distribution. This patched version simply has the name "IBMS506$" changed | 
|---|
| 366 | to "OS2AHCI$" and is otherwise identical. This patched program has been | 
|---|
| 367 | renamed to smartahci.exe to distinguish it from the unpatched version. | 
|---|
| 368 | The patched smartahci.exe program is provided AS-IS and is completely | 
|---|
| 369 | UNSUPPORTED. Use of this program is at your own risk. | 
|---|
| 370 |  | 
|---|
| 371 | NOTES: | 
|---|
| 372 |  | 
|---|
| 373 | - The IOCTL interface for SMART is based on the idea of IDE controllers | 
|---|
| 374 | with a master and a slave drive. OS2AHCI maps all devices (ATA or ATAPI) | 
|---|
| 375 | sequentially to this pattern. If, for example, you have 4 hard disks and | 
|---|
| 376 | one CDROM attached to a single controller on ports 1, 2, 5, 7, and 11, | 
|---|
| 377 | SMART tools will see 3 controllers as follows: | 
|---|
| 378 |  | 
|---|
| 379 | - controller 0, master: HD on port 1 | 
|---|
| 380 | - controller 0, slave:  HD on port 2 | 
|---|
| 381 | - controller 1, master: HD on port 5 | 
|---|
| 382 | - controller 1, slave:  HD on port 7 | 
|---|
| 383 | - controller 2, master: CDROM on port 11 | 
|---|
| 384 |  | 
|---|
| 385 | - The DSKSP_GEN_GET_COUNTERS interface is currently unsupported; calls to | 
|---|
| 386 | the corresponding IOCTL will return 0 for all counters. SMART counters | 
|---|
| 387 | are not affected by this limitation, i.e. SMART tools will be able to | 
|---|
| 388 | report counters from the physical disk; this limitation only affects | 
|---|
| 389 | the software counters maintained by ADD drivers which do support the | 
|---|
| 390 | DSKSP_GEN_GET_COUNTERS IOCTL request. | 
|---|
| 391 |  | 
|---|
| 392 |  | 
|---|
| 393 | Change Log | 
|---|
| 394 | ========== | 
|---|
| 395 |  | 
|---|
| 396 | v.1.31 21-Aug-2013 - David Azarewicz | 
|---|
| 397 | Enhanced debug output. | 
|---|
| 398 | Added code to check for bad geometries reported by the BIOS and fix them. | 
|---|
| 399 | Fixed a PCI ID coding error that has been there since version 1.01. | 
|---|
| 400 |  | 
|---|
| 401 | v.1.30 29-Jun-2013 - David Azarewicz | 
|---|
| 402 | Enhanced debug log output | 
|---|
| 403 | Removed the IBMS506 header that was causing problems and shouldn't | 
|---|
| 404 | be there anyway. | 
|---|
| 405 | Fixed a defect in the SMART IOCtl. | 
|---|
| 406 | Added ability to ignore individual ports. | 
|---|
| 407 |  | 
|---|
| 408 | v.1.29 12-Jun-2013 - David Azarewicz | 
|---|
| 409 | Changed scsi emulation to be on by default. | 
|---|
| 410 |  | 
|---|
| 411 | v.1.28 01-Jun-2013 - David Azarewicz | 
|---|
| 412 | Reworked trap dump kernel exit | 
|---|
| 413 | Removed unused IDC entry point. | 
|---|
| 414 | Reworked suspend/resume routines. | 
|---|
| 415 | Implemented a temporary hack to make resume work reasonably well. | 
|---|
| 416 | Suspend/resume is only supported on eCS systems with ACPI. | 
|---|
| 417 | Suspend/resume is known to not work reliably and cannot be further | 
|---|
| 418 | addressed in this driver. | 
|---|
| 419 |  | 
|---|
| 420 | v.1.27 23-Apr-2013 - David Azarewicz | 
|---|
| 421 | Added LVM aware disk geometry reporting. | 
|---|
| 422 | Begin to add disk information report - not finished yet. | 
|---|
| 423 | Removed undocumented /q switch and made the driver quiet by default. | 
|---|
| 424 | Debug output improvements. | 
|---|
| 425 | Added /b switch for setting debug baud rate. | 
|---|
| 426 | Fixed up time delay functions | 
|---|
| 427 |  | 
|---|
| 428 | v.1.26 26-Mar-2013 - David Azarewicz | 
|---|
| 429 | Fix spin-up / power-up issue on some hardware | 
|---|
| 430 | Reorganized and improved debug output. | 
|---|
| 431 |  | 
|---|
| 432 | v.1.26 21-Feb-2013 - rousseau | 
|---|
| 433 | Virtual box fix | 
|---|
| 434 | Some SMP fixes | 
|---|
| 435 | Changed default for port reset to always | 
|---|
| 436 |  | 
|---|
| 437 | v.1.25 02-Oct-2012 - markus.thi | 
|---|
| 438 | Added support for trap dumps | 
|---|
| 439 |  | 
|---|
| 440 | v.1.24 21-May-2012 - markus.thi | 
|---|
| 441 | Fixed JFS long format hang (ticket 16) | 
|---|
| 442 |  | 
|---|
| 443 | V.1.23 16-May-2012 - markus.thi | 
|---|
| 444 | added IDC entry point to allow switching back to BIOS mode | 
|---|
| 445 |  | 
|---|
| 446 | v.1.22 17-Oct-2011 - markus.thi | 
|---|
| 447 | Added "IBMS506" header to accomodate broken SMART tools. | 
|---|