source: trunk/src/os2ahci/README@ 147

Last change on this file since 147 was 147, checked in by rousseau, 13 years ago

Changed the default value of the /r option (TRACK ticket #21)

Reason for the change

o Snip from the TRAC ticket

<snip>

One thing that keeps coming up in some cases is that on systems with an
Intel disc controller you need the /R option specified.
In some cases the system is able to boot with from the CD but it does
not recognize the hard disc.
Using the /R option fixes.

</snip>

o Logic suggests...

Since /r was already turned on when an Intel AHCI controller was detected
to be in SATA mode, this report seems to imply that for some obscure reason
a port reset is needed even when the BIOS programmed the controller in
AHCI mode. This would suggest some faulty BIOS initialization.

Changed behavior

o The /r option is now on by default

It can be turned off by specifying /!r on the driver command-line.
However, when the [Intel] AHCI controller was found to be initialized
by the BIOS in SATA mode, ports will always be reset, even when /!r
is specified. This seems to be an [Intel] AHCI controller requirement.

Comment reference

o From a comment in ahci.c around line 146

<snip>

Adapter is not in AHCI mode and the spec says a COMRESET is
required when switching from SATA to AHCI mode and vice versa.

</snip>

File size: 15.8 KB
Line 
1====================================================================
2 eComStation AHCI Driver
3====================================================================
4
5
6Introduction
7============
8
9OS2AHCI is an AHCI driver for eComStation. It supports both ATA and
10ATAPI devices in a single driver, thus there's no need for an
11ATAPI/CDROM filter driver.
12
13
14Copyrights
15==========
16
17Copyright (c) 2011 thi.guten Software Development
18Copyright (c) 2011 Mensys B.V.
19
20Authors: Christian Mueller, Markus Thielen
21
22Parts copied from/inspired by the Linux AHCI driver;
23those parts are (c) Linux AHCI/ATA maintainers
24
25 This program is free software; you can redistribute it and/or modify
26 it under the terms of the GNU General Public License as published by
27 the Free Software Foundation; either version 2 of the License, or
28 (at your option) any later version.
29
30 This program is distributed in the hope that it will be useful,
31 but WITHOUT ANY WARRANTY; without even the implied warranty of
32 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 GNU General Public License for more details.
34
35 You should have received a copy of the GNU General Public License
36 along with this program; if not, write to the Free Software
37 Foundation, Inc., 59 Temple Place, Suite 330, Boston,
38 MA 02111-1307 USA
39
40
41Licensing and Source Code
42=========================
43
44The *binary* delivery of OS2AHCI.ADD as obtained from ecomstation.nl,
45or as part of packaged eComStation releases, is licensed to run with
46eComStation, only.
47
48The source code can be retrieved from http://svn.ecomstation.nl;
49in compliance to the GNU General Public License, the source code
50can of course be modified/compiled to run on other products as long
51as modifications will also be published as outlined in the GNU GPL2.
52
53The toolchain required for compilation consists of:
54
55 - IBM OS/2 DDK version 9.23 or later (see ddk\base\h\version.mak)
56 - Microsoft C600
57 - ALP Assembler (part of DDK)
58 - link.exe (part of DDK)
59
60Please note that builds other than the official binary delivered as
61part of eComStation releases or downloaded from ecomstation.nl are
62not officially supported by Mensys.
63
64
65Open Watcom Build
66-----------------
67
68The Open Watcom Build is fixed and now produces a working driver.
69
70The toolchain required for compilation with Open Watcom consists of:
71
72 - IBM OS/2 DDK version 9.23 or later (see ddk\base\h\version.mak)
73 (Used for include files and qgrep)
74 - Open Watcom C/C++ package
75 (available from: http://www.openwatcom.org/index.php/Downloads)
76 - WCC 16-bits C Compiler (part of the Open Watcom package)
77 - WASM Assembler (part of the Open Watcom package)
78 - WLINK Linker (part of the Open Watcom package)
79 - QGREP (part of DDK)
80
81Please note that the Open Watcom Build is not as extensively tested as the
82normal DDK Build so don't use it on production systems yet.
83
84Use the _wbuild.cmd script or run wmake -ms -f wmakefile to build it.
85When switching between building with the DDK and Open Watcom,
86be sure to do a clean first.
87
88
89
90Installation
91============
92
93- Copy the driver file, OS2AHCI.ADD, to C:\OS2\BOOT
94
95- Add the following line to CONFIG.SYS:
96 BASEDEV=OS2AHCI.ADD
97
98
99Driver Command Line Options
100===========================
101
102Global Options
103
104Option Description
105------------------------------------------------------------------------------
106/c:<addr> Set debug COM port base address in hex (default = 3f8);
107 if used, this option should come before any /d options.
108 If <addr> is set to 0, the COM port is turned off and
109 all output is directed to an internal trace ring buffer
110 that can be dumped on an OS/2 command prompt with the
111 command "type os2ahci$"; see the OS2AHCI project page
112 at http://svn.ecomstation.nl/ahci/wiki/AhciTrace
113 for more info.
114/d Debug output on COM port/trace buffer; multiple "/d"
115 options will increase verbosity:
116 1 = requests
117 2 = detailed
118 3 = verbose, including MMIO operations
119/v display adapter info during boot
120/g:<vendor>:<device> Add generic PCI ID to list of supported AHCI adapters
121 (e.g. /g:8086:2829)
122/t Perform thorough PCI ID scan; default = on, can be
123 turned off with /!t to perform only a PCI class scan
124/f Force the use of the HW write cache when using NCQ
125 commands; see "Native Command Queuing" below for
126 further explanation (default = off)
127/r Reset ports during initialization (default = on)
128 Can be turned off with /!r, however, when the
129 [Intel] AHCI controller was found to be
130 initialized by the BIOS in SATA mode, ports will
131 always be reset even when /!r was specified
132/a Set adapter for adapter-specific options
133 (default = -1, all adapters)
134/p Set port for port-specific options
135 (default = -1, all ports)
136
137Adapter-specific Options
138
139Option Description
140------------------------------------------------------------------------------
141/i Ignore current adapter
142
143Port-specific Options
144
145Option Description
146------------------------------------------------------------------------------
147/s Enable SCSI emulation for ATAPI units (default = off)
148 SCSI emulation is required for tools like cdrecord.
149/n Enable NCQ (Native Command Queuing) for hard disks
150 (default = off)
151/ls Set link speed (default = 0):
152 0 = maximum,
153 1 = limit to generation 1
154 2 = limit to generation 2
155 3 = limit to generation 3
156/lp Set link power management (default = 0):
157 0 = full power management,
158 1 = transitions to "partial slumber state" disabled,
159 2 = transitions to "slumber state" disabled,
160 3 = transitions to both partial and slumber states
161 disabled
162/4 Force track size to be 56 sectors regardless of the
163 reported disk geometry to optimize partition boundaries
164 for hard disks with 4096 byte sectors.
165
166Port-specific options depend on the currently active adapter
167and port selector (/a and /p). Those selectors are -1 per default
168which means "all" adapters/ports. The scope can be reduced by limiting
169it to an adapter (/a) or an adapter and a port (/a and /p). The scope
170can be reset by setting the corresponding option back to -1.
171
172For example:
173
174 BASEDEV=OS2AHCI.ADD /n /a:0 /p:5 /!n /a:1 /p:-1 /!n
175
176This has the following effect:
177
178 - Enable NCQ for all hard disks
179 - Disable NCQ for hard disk on adapter #0, port #5
180 - Disable NCQ for all hard disks on adapter #1
181
182
183Native Command Queuing
184======================
185
186Native Command Queuing (NCQ) is a feature which allows sending multiple I/O
187requests to hard disks before waiting for any of the requests to complete,
188much like Tagged Command Queuing for SCSI devices. This allows the disks
189to reorder I/O requests to minimize head movements, resulting in improved
190performance when executing random I/Os. In practice, this will be most
191noticable when multiple programs request I/O services to different parts
192of the disk -- a single program typically won't queue up I/O's but instead
193will wait for each I/O to complete (with the exception of programs like
194database servers).
195
196While we believe NCQ will work with the majority of controllers and hard
197disks, it's currently turned off by default until we have more feedback
198from eComStation users. In order to turn on NCQ, just add the command line
199option "/n" to OS2AHCI.ADD.
200
201NCQ and HW Caches
202-----------------
203
204In NCQ mode, OS2AHCI supports a request flag which allows upstream code
205(e.g. file systems) to force writes to go directly to the disk instead
206of being buffered in the HW disk cache. However, at least JFS doesn't
207support this flag properly which effectively disables the HW disk cache
208for write operations across the board, resulting in a substantial
209performance loss. In order to prevent OS2AHCI from disabling the HW
210cache when so requested by upstream code, please use the command line
211option "/f".
212
213This may, of course, result in data loss in case of power failures but
214apparently this was the situation with previous IDE drivers as well thus
215shouldn't make much difference in the field. The JFS code also seems to
216imply that this flag has never been widely supported by [IDE] drivers;
217otherwise, the JFS developers should have stumbled over the performance
218loss a long time ago and fixed the code.
219
220NOTES:
221
222 - Without NCQ, OS2AHCI behaves like former IDE drivers, i.e. the HW
223 cache will always be enabled (on modern disks).
224
225 - When suspending, rebooting or shutting down, OS2AHCI always flushes
226 the HW disk cache regardless of the "/f" or "/n" command line options.
227
228
229Interoperability With IDE Drivers
230=================================
231
232There are three kinds of IDE/ATA/SATA controllers:
233
234 1. Legacy controllers (IDE or SATA) without AHCI support
235 This kind of controller will only be recognized by IDE drivers
236 (IBM1S506.ADD or DANIS506.ADD).
237
238 2. AHCI-capable controllers which supports IDE/SATA legacy interfaces
239 This kind of controller will work with IDE or AHCI drivers and it's
240 up to the user to decide which driver to use.
241
242 3. AHCI-only controllers
243 This kind of controller will only be recognized by OS2AHCI.
244
245If there's a mix of controllers of types 1 and 3, both an IDE and an AHCI
246driver will be required.
247
248If type 2 controllers are involved, it's up to the user to decide which
249driver to use. Both DANIS506.ADD and OS2AHCI.ADD will verify whether another
250driver has already allocated the corresponding adapter, thus the only
251decision to take for mixed configurations is whether type-2 controllers
252should be handled by DANIS506.ADD or OS2AHCI.ADD and this can be done by
253having the desired driver's BASEDEV statement coming first in CONFIG.SYS.
254
255NOTE: Older versions of DANIS506.ADD did not verify whether the resources
256 of a particular adapter were already allocated by another driver.
257 DANIS506.ADD 1.8.8 or later is required for this to work.
258
259 When using earlier versions of DANI1S506.ADD, the options "/A:x /I"
260 will be required to tell DANI1S506.ADD to ignore adapters to be
261 driven by OS2AHCI.ADD. The same applies to IBM1S506.ADD
262
263Mixed Controller Example
264------------------------
265
266Assume a DELL D630 or a Thinkpad T60. The hard disk is attached to the
267SATA/AHCI controller of the ICH-7 hub while the CDROM is attached to the
268legacy PATA IDE controller. This allows two different configurations:
269
270 1. Drive HDD and CDROM via DANIS506.ADD
271 2. Drive HDD via OS2AHCI.ADD and CDROM via DANI1S506.ADD
272
273OS2AHCI.ADD can't drive the CDROM because it's attached to a legacy PATA
274IDE controller which doesn't support AHCI.
275
276 - If OS2AHCI.ADD comes first in CONFIG.SYS, it will take over the SATA/AHCI
277 controller and drive the HDD. DANIS506.ADD will take care of the PATA/IDE
278 controller for the CDROM.
279 - If DANIS506.ADD comes first in CONFIG.SYS, it will take over both the
280 SATA/AHCI and the PATA/IDE controller and OS2AHCI.ADD will silently exit.
281
282Advantages of AHCI
283------------------
284
285The interfaces provided by the various [Intel] controllers could be
286summarized like this (the term ATA as driver interface being a bit of our
287own invention):
288
289 - Intel PIIX: IDE (I/O registers) and ATA (taskfile)
290 - Intel ICH6: IDE (I/O registers), ATA (taskfile) and SATA
291 (FIS, vendor-specific)
292 - Intel ICH7: IDE (I/O registers), ATA (taskfile), SATA
293 (FIS, vendor-specific) and AHCI (FIS)
294 - Intel PCH: AHCI (FIS)
295
296Taskfiles are regions in memory with ATA commands which the IDE/ATA
297controller can read and process autonomously. FIS (Frame Information
298Structures) are pretty much the same but they are specific to the SATA
299communication protocol on the serial link. The most important FIS type
300for AHCI drivers is the H2D (host to device) FIS which basically contains
301the ATA command to be executed.
302
303The big advantage of AHCI controllers, apart from being vendor-neutral,
304is that they take care of a lot of things which previous-generation
305drivers like DANI1S506 would have to do step by step. For example, in
306order to send an ATAPI command, DANIS506 would have to do the following:
307
308 * Send ATA "PACKET" command to device (via IDE registers, ATA taskfiles
309 or SATA FIS)
310 * Wait until device signals via interrupt it's ready for the ATAPI command
311 * Send ATAPI command to device via PIO
312 * Wait until device signals via interrupt it's ready to transfer data
313 * Send/Receive any data that might come along with the ATAPI command via
314 PIO, or wait for DMA transfer to complete
315 * Wait until device signals via interrupt that command and data transfer
316 have completed
317
318For OS2AHCI, the same operation looks like this:
319
320 * Fill in AHCI command header, FIS with ATA "PACKET" command and the ATAPI
321 command
322 * Tell port engine to process the command
323 * Wait until controller signals via interrupt that command and data
324 transfer have completed
325
326The AHCI controller automatically takes care of all underlying bits and
327pieces. OS2AHCI doesn't even have to know whether a particular message is
328sent via PIO or DMA because this is handled by the AHCI controller, too.
329And the whole concept of PIO and DMA is only relevant between AHCI controller
330and the device -- all transfers between OS2AHCI and the AHCI controller are
331always done via DMA.
332
333
334SMART Support
335=============
336
337Starting with version 1.22, OS2AHCI supports the IOCTL interface required by
338existing SMART monitoring tools. Since those tools are hard-coded to open
339the character device named "IBMS506$", OS2AHCI will now register a device
340with this name, too.
341
342NOTES:
343
344 - If multiple drivers exporting this character device name are loaded at
345 the same time, the driver loaded last will receive all [SMART] requests.
346 This means that if both DANIS506 and OS2AHCI are loaded and SMART support
347 for OS2AHCI-controlled hard disks is desired, OS2AHCI will have to be
348 loaded after DANIS506. It also means that DANIS506 may have to be told
349 to ignore type 2 controllers (i.e. controllers supporting both SATA and
350 AHCI) using the command line options "/A:x /I".
351
352 - The IOCTL interface for SMART is based on the idea of IDE controllers
353 with a master and a slave drive. OS2AHCI maps all devices (ATA or ATAPI)
354 sequentially to this pattern. If, for example, you have 4 hard disks and
355 one CDROM attached to a single controller on ports 1, 2, 5, 7, and 11,
356 SMART tools will see 3 controllers as follows:
357
358 - controller 0, master: HD on port 1
359 - controller 0, slave: HD on port 2
360 - controller 1, master: HD on port 5
361 - controller 1, slave: HD on port 7
362 - controller 2, master: CDROM on port 11
363
364 - The DSKSP_GEN_GET_COUNTERS interface is currently unsupported; calls to
365 the corresponding IOCTL will return 0 for all counters. SMART counters
366 are not affected by this limitation, i.e. SMART tools will be able to
367 report counters from the physical disk; this limitation only affects
368 the software counters maintained by ADD drivers which do support the
369 DSKSP_GEN_GET_COUNTERS IOCTL request.
370
Note: See TracBrowser for help on using the repository browser.