source: trunk/src/os2ahci/README@ 125

Last change on this file since 125 was 120, checked in by Markus Thielen, 14 years ago

updated README

File size: 11.7 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
60
61Watcom Build
62------------
63
64The source tree contains several files that were created during an
65attempt to use the Watcom compiler (e.g. wmakefile); however, the
66Watcom build is broken and produces a non-working driver.
67
68
69Installation
70============
71
72- Copy the driver file, OS2AHCI.ADD, to C:\OS2\BOOT
73
74- Add the following line to CONFIG.SYS:
75 BASEDEV=OS2AHCI.ADD
76
77
78Driver Command Line Options
79===========================
80
81Global Options
82
83Option Description
84------------------------------------------------------------------------------
85/c:<addr> Set debug COM port base address in hex (default = 3f8);
86 if used, this option should come before any /d options.
87 If <addr> is set to 0, the COM port is turned off and
88 all output is directed to an internal trace ring buffer
89 that can be dumped on an OS/2 command prompt with the
90 command "type os2ahci$"; see the OS2AHCI project page
91 at http://svn.ecomstation.nl/ahci/wiki/AhciTrace
92 for more info.
93/d Debug output on COM port/trace buffer; multiple "/d"
94 options will increase verbosity:
95 1 = requests
96 2 = detailed
97 3 = verbose, including MMIO operations
98/v display adapter info during boot
99/g:<vendor>:<device> Add generic PCI ID to list of supported AHCI adapters
100 (e.g. /g:8086:2829)
101/t Perform thorough PCI ID scan; default = on, can be
102 turned off with /!t to perform only a PCI class scan
103/r Reset ports during initialization (default = off
104 unless the [Intel] AHCI controller was found to be
105 initialized by the BIOS to SATA mode)
106/a Set adapter for adapter-specific options
107 (default = -1, all adapters)
108/p Set port for port-specific options
109 (default = -1, all ports)
110
111Adapter-specific Options
112
113Option Description
114------------------------------------------------------------------------------
115/i Ignore current adapter
116
117Port-specific Options
118
119Option Description
120------------------------------------------------------------------------------
121/s Enable SCSI emulation for ATAPI units (default = off)
122 SCSI emulation is required for tools like cdrecord.
123/n Enable NCQ (Native Command Queuing) for hard disks
124 (default = off)
125/ls Set link speed (default = 0):
126 0 = maximum,
127 1 = limit to generation 1
128 2 = limit to generation 2
129 3 = limit to generation 3
130/lp Set link power management (default = 0):
131 0 = full power management,
132 1 = transitions to "partial slumber state" disabled,
133 2 = transitions to "slumber state" disabled,
134 3 = transitions to both partial and slumber states
135 disabled
136/4 Force track size to be 56 sectors regardless of the
137 reported disk geometry to optimize partition boundaries
138 for hard disks with 4096 byte sectors.
139
140Port-specific options depend on the currently active adapter
141and port selector (/a and /p). Those selectors are -1 per default
142which means "all" adapters/ports. The scope can be reduced by limiting
143it to an adapter (/a) or an adapter and a port (/a and /p). The scope
144can be reset by setting the corresponding option back to -1.
145
146For example:
147
148 BASEDEV=OS2AHCI.ADD /n /a:0 /p:5 /!n /a:1 /p:-1 /!n
149
150This has the following effect:
151
152 - Enable NCQ for all hard disks
153 - Disable NCQ for hard disk on adapter #0, port #5
154 - Disable NCQ for all hard disks on adapter #1
155
156
157Native Command Queuing
158======================
159
160Native Command Queuing (NCQ) is a feature which allows sending multiple I/O
161requests to hard disks before waiting for any of the requests to complete,
162much like Tagged Command Queuing for SCSI devices. This allows the disks
163to reorder I/O requests to minimize head movements, resulting in improved
164performance when executing random I/Os. In practice, this will be most
165noticable when multiple programs request I/O services to different parts
166of the disk -- a single program typically won't queue up I/O's but instead
167will wait for each I/O to complete (with the exception of programs like
168database servers).
169
170While we believe NCQ will work with the majority of controllers and hard
171disks, it's currently turned off by default until we have more feedback
172from eComStation users. In order to turn on NCQ, just add the command line
173option "/n" to OS2AHCI.ADD.
174
175
176Interoperability With IDE Drivers
177=================================
178
179There are three kinds of IDE/ATA/SATA controllers:
180
181 1. Legacy controllers (IDE or SATA) without AHCI support
182 This kind of controller will only be recognized by IDE drivers
183 (IBM1S506.ADD or DANIS506.ADD).
184
185 2. AHCI-capable controllers which supports IDE/SATA legacy interfaces
186 This kind of controller will work with IDE or AHCI drivers and it's
187 up to the user to decide which driver to use.
188
189 3. AHCI-only controllers
190 This kind of controller will only be recognized by OS2AHCI.
191
192If there's a mix of controllers of types 1 and 3, both an IDE and an AHCI
193driver will be required.
194
195If type 2 controllers are involved, it's up to the user to decide which
196driver to use. Both DANIS506.ADD and OS2AHCI.ADD will verify whether another
197driver has already allocated the corresponding adapter, thus the only
198decision to take for mixed configurations is whether type-2 controllers
199should be handled by DANIS506.ADD or OS2AHCI.ADD and this can be done by
200having the desired driver's BASEDEV statement coming first in CONFIG.SYS.
201
202NOTE: Older versions of DANIS506.ADD did not verify whether the resources
203 of a particular adapter were already allocated by another driver.
204 DANIS506.ADD 1.8.8 or later is required for this to work.
205
206 When using earlier versions of DANI1S506.ADD, the options "/A:x /I"
207 will be required to tell DANI1S506.ADD to ignore adapters to be
208 driven by OS2AHCI.ADD. The same applies to IBM1S506.ADD
209
210Mixed Controller Example
211------------------------
212
213Assume a DELL D630 or a Thinkpad T60. The hard disk is attached to the
214SATA/AHCI controller of the ICH-7 hub while the CDROM is attached to the
215legacy PATA IDE controller. This allows two different configurations:
216
217 1. Drive HDD and CDROM via DANIS506.ADD
218 2. Drive HDD via OS2AHCI.ADD and CDROM via DANI1S506.ADD
219
220OS2AHCI.ADD can't drive the CDROM because it's attached to a legacy PATA
221IDE controller which doesn't support AHCI.
222
223 - If OS2AHCI.ADD comes first in CONFIG.SYS, it will take over the SATA/AHCI
224 controller and drive the HDD. DANIS506.ADD will take care of the PATA/IDE
225 controller for the CDROM.
226 - If DANIS506.ADD comes first in CONFIG.SYS, it will take over both the
227 SATA/AHCI and the PATA/IDE controller and OS2AHCI.ADD will silently exit.
228
229Advantages of AHCI
230------------------
231
232The interfaces provided by the various [Intel] controllers could be
233summarized like this (the term ATA as driver interface being a bit of our
234own invention):
235
236 - Intel PIIX: IDE (I/O registers) and ATA (taskfile)
237 - Intel ICH6: IDE (I/O registers), ATA (taskfile) and SATA
238 (FIS, vendor-specific)
239 - Intel ICH7: IDE (I/O registers), ATA (taskfile), SATA
240 (FIS, vendor-specific) and AHCI (FIS)
241 - Intel PCH: AHCI (FIS)
242
243Taskfiles are regions in memory with ATA commands which the IDE/ATA
244controller can read and process autonomously. FIS (Frame Information
245Structures) are pretty much the same but they are specific to the SATA
246communication protocol on the serial link. The most important FIS type
247for AHCI drivers is the H2D (host to device) FIS which basically contains
248the ATA command to be executed.
249
250The big advantage of AHCI controllers, apart from being vendor-neutral,
251is that they take care of a lot of things which previous-generation
252drivers like DANI1S506 would have to do step by step. For example, in
253order to send an ATAPI command, DANIS506 would have to do the following:
254
255 * Send ATA "PACKET" command to device (via IDE registers, ATA taskfiles
256 or SATA FIS)
257 * Wait until device signals via interrupt it's ready for the ATAPI command
258 * Send ATAPI command to device via PIO
259 * Wait until device signals via interrupt it's ready to transfer data
260 * Send/Receive any data that might come along with the ATAPI command via
261 PIO, or wait for DMA transfer to complete
262 * Wait until device signals via interrupt that command and data transfer
263 have completed
264
265For OS2AHCI, the same operation looks like this:
266
267 * Fill in AHCI command header, FIS with ATA "PACKET" command and the ATAPI
268 command
269 * Tell port engine to process the command
270 * Wait until controller signals via interrupt that command and data
271 transfer have completed
272
273The AHCI controller automatically takes care of all underlying bits and
274pieces. OS2AHCI doesn't even have to know whether a particular message is
275sent via PIO or DMA because this is handled by the AHCI controller, too.
276And the whole concept of PIO and DMA is only relevant between AHCI controller
277and the device -- all transfers between OS2AHCI and the AHCI controller are
278always done via DMA.
279
Note: See TracBrowser for help on using the repository browser.