aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-02-02 15:58:57 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2008-02-02 15:58:57 -0500
commit9135f1901ee6449dfe338adf6e40e9c2025b8150 (patch)
tree05e1ab38563a93cf0df8c05d21062b85b14f8491
parent124d3b7041f9a0ca7c43a6293e1cae4576c32fd5 (diff)
parentd59823fa44f7d9babf586b3c705db314aa0f9822 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (95 commits) ide-tape: remove idetape_config_t typedef ide-tape: remove mtio.h related comments ide-tape: make function name more accurate ide-tape: remove unused sense packet commands. ide-tape: use generic byteorder macros ide-tape: remove EXPERIMENTAL driver status ide-tape: use generic scsi commands ide-tape: remove struct idetape_block_size_page_t ide-tape: remove structs os_partition_t, os_dat_entry_t, os_dat_t ide-tape: remove struct idetape_parameter_block_descriptor_t ide-tape: remove struct idetape_medium_partition_page_t ide-tape: remove struct idetape_data_compression_page_t ide-tape: remove struct idetape_inquiry_result_t ide-tape: remove struct idetape_capabilities_page_t ide-tape: remove IDETAPE_DEBUG_BUGS ide-tape: remove IDETAPE_DEBUG_INFO ide-tape: dump gcw fields on error in idetape_identify_device() ide-tape: remove struct idetape_mode_parameter_header_t ide-tape: remove struct idetape_request_sense_result_t ide-tape: remove dead code ...
-rw-r--r--Documentation/ide/ChangeLog.ide-tape.1995-2002257
-rw-r--r--Documentation/ide/ide-tape.txt146
-rw-r--r--drivers/ide/Kconfig3
-rw-r--r--drivers/ide/arm/bast-ide.c20
-rw-r--r--drivers/ide/arm/icside.c25
-rw-r--r--drivers/ide/arm/ide_arm.c2
-rw-r--r--drivers/ide/arm/rapide.c4
-rw-r--r--drivers/ide/cris/ide-cris.c24
-rw-r--r--drivers/ide/h8300/ide-h8300.c2
-rw-r--r--drivers/ide/ide-acpi.c63
-rw-r--r--drivers/ide/ide-cd.c2
-rw-r--r--drivers/ide/ide-dma.c20
-rw-r--r--drivers/ide/ide-floppy.c1438
-rw-r--r--drivers/ide/ide-generic.c2
-rw-r--r--drivers/ide/ide-iops.c109
-rw-r--r--drivers/ide/ide-pnp.c9
-rw-r--r--drivers/ide/ide-probe.c278
-rw-r--r--drivers/ide/ide-proc.c7
-rw-r--r--drivers/ide/ide-tape.c1240
-rw-r--r--drivers/ide/ide-taskfile.c11
-rw-r--r--drivers/ide/ide.c77
-rw-r--r--drivers/ide/legacy/ali14xx.c24
-rw-r--r--drivers/ide/legacy/buddha.c2
-rw-r--r--drivers/ide/legacy/dtc2278.c36
-rw-r--r--drivers/ide/legacy/falconide.c2
-rw-r--r--drivers/ide/legacy/gayle.c2
-rw-r--r--drivers/ide/legacy/ht6560b.c48
-rw-r--r--drivers/ide/legacy/ide-cs.c29
-rw-r--r--drivers/ide/legacy/ide_platform.c4
-rw-r--r--drivers/ide/legacy/macide.c12
-rw-r--r--drivers/ide/legacy/q40ide.c2
-rw-r--r--drivers/ide/legacy/qd65xx.c67
-rw-r--r--drivers/ide/legacy/umc8672.c24
-rw-r--r--drivers/ide/mips/au1xxx-ide.c37
-rw-r--r--drivers/ide/mips/swarm.c2
-rw-r--r--drivers/ide/pci/aec62xx.c26
-rw-r--r--drivers/ide/pci/alim15x3.c6
-rw-r--r--drivers/ide/pci/amd74xx.c21
-rw-r--r--drivers/ide/pci/atiixp.c30
-rw-r--r--drivers/ide/pci/cmd640.c33
-rw-r--r--drivers/ide/pci/cmd64x.c6
-rw-r--r--drivers/ide/pci/cs5520.c12
-rw-r--r--drivers/ide/pci/cs5530.c8
-rw-r--r--drivers/ide/pci/cs5535.c10
-rw-r--r--drivers/ide/pci/cy82c693.c1
-rw-r--r--drivers/ide/pci/delkin_cb.c41
-rw-r--r--drivers/ide/pci/generic.c7
-rw-r--r--drivers/ide/pci/hpt34x.c7
-rw-r--r--drivers/ide/pci/hpt366.c89
-rw-r--r--drivers/ide/pci/it8213.c24
-rw-r--r--drivers/ide/pci/it821x.c8
-rw-r--r--drivers/ide/pci/jmicron.c9
-rw-r--r--drivers/ide/pci/ns87415.c4
-rw-r--r--drivers/ide/pci/opti621.c15
-rw-r--r--drivers/ide/pci/pdc202xx_new.c14
-rw-r--r--drivers/ide/pci/pdc202xx_old.c17
-rw-r--r--drivers/ide/pci/piix.c9
-rw-r--r--drivers/ide/pci/rz1000.c10
-rw-r--r--drivers/ide/pci/sc1200.c8
-rw-r--r--drivers/ide/pci/scc_pata.c10
-rw-r--r--drivers/ide/pci/serverworks.c11
-rw-r--r--drivers/ide/pci/sgiioc4.c20
-rw-r--r--drivers/ide/pci/siimage.c31
-rw-r--r--drivers/ide/pci/sis5513.c14
-rw-r--r--drivers/ide/pci/sl82c105.c6
-rw-r--r--drivers/ide/pci/slc90e66.c26
-rw-r--r--drivers/ide/pci/tc86c001.c24
-rw-r--r--drivers/ide/pci/triflex.c5
-rw-r--r--drivers/ide/pci/trm290.c7
-rw-r--r--drivers/ide/pci/via82cxxx.c10
-rw-r--r--drivers/ide/ppc/mpc8xx.c2
-rw-r--r--drivers/ide/ppc/pmac.c84
-rw-r--r--drivers/ide/setup-pci.c77
-rw-r--r--drivers/macintosh/mediabay.c2
-rw-r--r--drivers/scsi/ide-scsi.c9
-rw-r--r--include/linux/hdreg.h4
-rw-r--r--include/linux/ide.h51
77 files changed, 1989 insertions, 2849 deletions
diff --git a/Documentation/ide/ChangeLog.ide-tape.1995-2002 b/Documentation/ide/ChangeLog.ide-tape.1995-2002
new file mode 100644
index 000000000000..877fac8770b3
--- /dev/null
+++ b/Documentation/ide/ChangeLog.ide-tape.1995-2002
@@ -0,0 +1,257 @@
1/*
2 * Ver 0.1 Nov 1 95 Pre-working code :-)
3 * Ver 0.2 Nov 23 95 A short backup (few megabytes) and restore procedure
4 * was successful ! (Using tar cvf ... on the block
5 * device interface).
6 * A longer backup resulted in major swapping, bad
7 * overall Linux performance and eventually failed as
8 * we received non serial read-ahead requests from the
9 * buffer cache.
10 * Ver 0.3 Nov 28 95 Long backups are now possible, thanks to the
11 * character device interface. Linux's responsiveness
12 * and performance doesn't seem to be much affected
13 * from the background backup procedure.
14 * Some general mtio.h magnetic tape operations are
15 * now supported by our character device. As a result,
16 * popular tape utilities are starting to work with
17 * ide tapes :-)
18 * The following configurations were tested:
19 * 1. An IDE ATAPI TAPE shares the same interface
20 * and irq with an IDE ATAPI CDROM.
21 * 2. An IDE ATAPI TAPE shares the same interface
22 * and irq with a normal IDE disk.
23 * Both configurations seemed to work just fine !
24 * However, to be on the safe side, it is meanwhile
25 * recommended to give the IDE TAPE its own interface
26 * and irq.
27 * The one thing which needs to be done here is to
28 * add a "request postpone" feature to ide.c,
29 * so that we won't have to wait for the tape to finish
30 * performing a long media access (DSC) request (such
31 * as a rewind) before we can access the other device
32 * on the same interface. This effect doesn't disturb
33 * normal operation most of the time because read/write
34 * requests are relatively fast, and once we are
35 * performing one tape r/w request, a lot of requests
36 * from the other device can be queued and ide.c will
37 * service all of them after this single tape request.
38 * Ver 1.0 Dec 11 95 Integrated into Linux 1.3.46 development tree.
39 * On each read / write request, we now ask the drive
40 * if we can transfer a constant number of bytes
41 * (a parameter of the drive) only to its buffers,
42 * without causing actual media access. If we can't,
43 * we just wait until we can by polling the DSC bit.
44 * This ensures that while we are not transferring
45 * more bytes than the constant referred to above, the
46 * interrupt latency will not become too high and
47 * we won't cause an interrupt timeout, as happened
48 * occasionally in the previous version.
49 * While polling for DSC, the current request is
50 * postponed and ide.c is free to handle requests from
51 * the other device. This is handled transparently to
52 * ide.c. The hwgroup locking method which was used
53 * in the previous version was removed.
54 * Use of new general features which are provided by
55 * ide.c for use with atapi devices.
56 * (Programming done by Mark Lord)
57 * Few potential bug fixes (Again, suggested by Mark)
58 * Single character device data transfers are now
59 * not limited in size, as they were before.
60 * We are asking the tape about its recommended
61 * transfer unit and send a larger data transfer
62 * as several transfers of the above size.
63 * For best results, use an integral number of this
64 * basic unit (which is shown during driver
65 * initialization). I will soon add an ioctl to get
66 * this important parameter.
67 * Our data transfer buffer is allocated on startup,
68 * rather than before each data transfer. This should
69 * ensure that we will indeed have a data buffer.
70 * Ver 1.1 Dec 14 95 Fixed random problems which occurred when the tape
71 * shared an interface with another device.
72 * (poll_for_dsc was a complete mess).
73 * Removed some old (non-active) code which had
74 * to do with supporting buffer cache originated
75 * requests.
76 * The block device interface can now be opened, so
77 * that general ide driver features like the unmask
78 * interrupts flag can be selected with an ioctl.
79 * This is the only use of the block device interface.
80 * New fast pipelined operation mode (currently only on
81 * writes). When using the pipelined mode, the
82 * throughput can potentially reach the maximum
83 * tape supported throughput, regardless of the
84 * user backup program. On my tape drive, it sometimes
85 * boosted performance by a factor of 2. Pipelined
86 * mode is enabled by default, but since it has a few
87 * downfalls as well, you may want to disable it.
88 * A short explanation of the pipelined operation mode
89 * is available below.
90 * Ver 1.2 Jan 1 96 Eliminated pipelined mode race condition.
91 * Added pipeline read mode. As a result, restores
92 * are now as fast as backups.
93 * Optimized shared interface behavior. The new behavior
94 * typically results in better IDE bus efficiency and
95 * higher tape throughput.
96 * Pre-calculation of the expected read/write request
97 * service time, based on the tape's parameters. In
98 * the pipelined operation mode, this allows us to
99 * adjust our polling frequency to a much lower value,
100 * and thus to dramatically reduce our load on Linux,
101 * without any decrease in performance.
102 * Implemented additional mtio.h operations.
103 * The recommended user block size is returned by
104 * the MTIOCGET ioctl.
105 * Additional minor changes.
106 * Ver 1.3 Feb 9 96 Fixed pipelined read mode bug which prevented the
107 * use of some block sizes during a restore procedure.
108 * The character device interface will now present a
109 * continuous view of the media - any mix of block sizes
110 * during a backup/restore procedure is supported. The
111 * driver will buffer the requests internally and
112 * convert them to the tape's recommended transfer
113 * unit, making performance almost independent of the
114 * chosen user block size.
115 * Some improvements in error recovery.
116 * By cooperating with ide-dma.c, bus mastering DMA can
117 * now sometimes be used with IDE tape drives as well.
118 * Bus mastering DMA has the potential to dramatically
119 * reduce the CPU's overhead when accessing the device,
120 * and can be enabled by using hdparm -d1 on the tape's
121 * block device interface. For more info, read the
122 * comments in ide-dma.c.
123 * Ver 1.4 Mar 13 96 Fixed serialize support.
124 * Ver 1.5 Apr 12 96 Fixed shared interface operation, broken in 1.3.85.
125 * Fixed pipelined read mode inefficiency.
126 * Fixed nasty null dereferencing bug.
127 * Ver 1.6 Aug 16 96 Fixed FPU usage in the driver.
128 * Fixed end of media bug.
129 * Ver 1.7 Sep 10 96 Minor changes for the CONNER CTT8000-A model.
130 * Ver 1.8 Sep 26 96 Attempt to find a better balance between good
131 * interactive response and high system throughput.
132 * Ver 1.9 Nov 5 96 Automatically cross encountered filemarks rather
133 * than requiring an explicit FSF command.
134 * Abort pending requests at end of media.
135 * MTTELL was sometimes returning incorrect results.
136 * Return the real block size in the MTIOCGET ioctl.
137 * Some error recovery bug fixes.
138 * Ver 1.10 Nov 5 96 Major reorganization.
139 * Reduced CPU overhead a bit by eliminating internal
140 * bounce buffers.
141 * Added module support.
142 * Added multiple tape drives support.
143 * Added partition support.
144 * Rewrote DSC handling.
145 * Some portability fixes.
146 * Removed ide-tape.h.
147 * Additional minor changes.
148 * Ver 1.11 Dec 2 96 Bug fix in previous DSC timeout handling.
149 * Use ide_stall_queue() for DSC overlap.
150 * Use the maximum speed rather than the current speed
151 * to compute the request service time.
152 * Ver 1.12 Dec 7 97 Fix random memory overwriting and/or last block data
153 * corruption, which could occur if the total number
154 * of bytes written to the tape was not an integral
155 * number of tape blocks.
156 * Add support for INTERRUPT DRQ devices.
157 * Ver 1.13 Jan 2 98 Add "speed == 0" work-around for HP COLORADO 5GB
158 * Ver 1.14 Dec 30 98 Partial fixes for the Sony/AIWA tape drives.
159 * Replace cli()/sti() with hwgroup spinlocks.
160 * Ver 1.15 Mar 25 99 Fix SMP race condition by replacing hwgroup
161 * spinlock with private per-tape spinlock.
162 * Ver 1.16 Sep 1 99 Add OnStream tape support.
163 * Abort read pipeline on EOD.
164 * Wait for the tape to become ready in case it returns
165 * "in the process of becoming ready" on open().
166 * Fix zero padding of the last written block in
167 * case the tape block size is larger than PAGE_SIZE.
168 * Decrease the default disconnection time to tn.
169 * Ver 1.16e Oct 3 99 Minor fixes.
170 * Ver 1.16e1 Oct 13 99 Patches by Arnold Niessen,
171 * niessen@iae.nl / arnold.niessen@philips.com
172 * GO-1) Undefined code in idetape_read_position
173 * according to Gadi's email
174 * AJN-1) Minor fix asc == 11 should be asc == 0x11
175 * in idetape_issue_packet_command (did effect
176 * debugging output only)
177 * AJN-2) Added more debugging output, and
178 * added ide-tape: where missing. I would also
179 * like to add tape->name where possible
180 * AJN-3) Added different debug_level's
181 * via /proc/ide/hdc/settings
182 * "debug_level" determines amount of debugging output;
183 * can be changed using /proc/ide/hdx/settings
184 * 0 : almost no debugging output
185 * 1 : 0+output errors only
186 * 2 : 1+output all sensekey/asc
187 * 3 : 2+follow all chrdev related procedures
188 * 4 : 3+follow all procedures
189 * 5 : 4+include pc_stack rq_stack info
190 * 6 : 5+USE_COUNT updates
191 * AJN-4) Fixed timeout for retension in idetape_queue_pc_tail
192 * from 5 to 10 minutes
193 * AJN-5) Changed maximum number of blocks to skip when
194 * reading tapes with multiple consecutive write
195 * errors from 100 to 1000 in idetape_get_logical_blk
196 * Proposed changes to code:
197 * 1) output "logical_blk_num" via /proc
198 * 2) output "current_operation" via /proc
199 * 3) Either solve or document the fact that `mt rewind' is
200 * required after reading from /dev/nhtx to be
201 * able to rmmod the idetape module;
202 * Also, sometimes an application finishes but the
203 * device remains `busy' for some time. Same cause ?
204 * Proposed changes to release-notes:
205 * 4) write a simple `quickstart' section in the
206 * release notes; I volunteer if you don't want to
207 * 5) include a pointer to video4linux in the doc
208 * to stimulate video applications
209 * 6) release notes lines 331 and 362: explain what happens
210 * if the application data rate is higher than 1100 KB/s;
211 * similar approach to lower-than-500 kB/s ?
212 * 7) 6.6 Comparison; wouldn't it be better to allow different
213 * strategies for read and write ?
214 * Wouldn't it be better to control the tape buffer
215 * contents instead of the bandwidth ?
216 * 8) line 536: replace will by would (if I understand
217 * this section correctly, a hypothetical and unwanted situation
218 * is being described)
219 * Ver 1.16f Dec 15 99 Change place of the secondary OnStream header frames.
220 * Ver 1.17 Nov 2000 / Jan 2001 Marcel Mol, marcel@mesa.nl
221 * - Add idetape_onstream_mode_sense_tape_parameter_page
222 * function to get tape capacity in frames: tape->capacity.
223 * - Add support for DI-50 drives( or any DI- drive).
224 * - 'workaround' for read error/blank block around block 3000.
225 * - Implement Early warning for end of media for Onstream.
226 * - Cosmetic code changes for readability.
227 * - Idetape_position_tape should not use SKIP bit during
228 * Onstream read recovery.
229 * - Add capacity, logical_blk_num and first/last_frame_position
230 * to /proc/ide/hd?/settings.
231 * - Module use count was gone in the Linux 2.4 driver.
232 * Ver 1.17a Apr 2001 Willem Riede osst@riede.org
233 * - Get drive's actual block size from mode sense block descriptor
234 * - Limit size of pipeline
235 * Ver 1.17b Oct 2002 Alan Stern <stern@rowland.harvard.edu>
236 * Changed IDETAPE_MIN_PIPELINE_STAGES to 1 and actually used
237 * it in the code!
238 * Actually removed aborted stages in idetape_abort_pipeline
239 * instead of just changing the command code.
240 * Made the transfer byte count for Request Sense equal to the
241 * actual length of the data transfer.
242 * Changed handling of partial data transfers: they do not
243 * cause DMA errors.
244 * Moved initiation of DMA transfers to the correct place.
245 * Removed reference to unallocated memory.
246 * Made __idetape_discard_read_pipeline return the number of
247 * sectors skipped, not the number of stages.
248 * Replaced errant kfree() calls with __idetape_kfree_stage().
249 * Fixed off-by-one error in testing the pipeline length.
250 * Fixed handling of filemarks in the read pipeline.
251 * Small code optimization for MTBSF and MTBSFM ioctls.
252 * Don't try to unlock the door during device close if is
253 * already unlocked!
254 * Cosmetic fixes to miscellaneous debugging output messages.
255 * Set the minimum /proc/ide/hd?/settings values for "pipeline",
256 * "pipeline_min", and "pipeline_max" to 1.
257 */
diff --git a/Documentation/ide/ide-tape.txt b/Documentation/ide/ide-tape.txt
new file mode 100644
index 000000000000..658f271a373f
--- /dev/null
+++ b/Documentation/ide/ide-tape.txt
@@ -0,0 +1,146 @@
1/*
2 * IDE ATAPI streaming tape driver.
3 *
4 * This driver is a part of the Linux ide driver.
5 *
6 * The driver, in co-operation with ide.c, basically traverses the
7 * request-list for the block device interface. The character device
8 * interface, on the other hand, creates new requests, adds them
9 * to the request-list of the block device, and waits for their completion.
10 *
11 * Pipelined operation mode is now supported on both reads and writes.
12 *
13 * The block device major and minor numbers are determined from the
14 * tape's relative position in the ide interfaces, as explained in ide.c.
15 *
16 * The character device interface consists of the following devices:
17 *
18 * ht0 major 37, minor 0 first IDE tape, rewind on close.
19 * ht1 major 37, minor 1 second IDE tape, rewind on close.
20 * ...
21 * nht0 major 37, minor 128 first IDE tape, no rewind on close.
22 * nht1 major 37, minor 129 second IDE tape, no rewind on close.
23 * ...
24 *
25 * The general magnetic tape commands compatible interface, as defined by
26 * include/linux/mtio.h, is accessible through the character device.
27 *
28 * General ide driver configuration options, such as the interrupt-unmask
29 * flag, can be configured by issuing an ioctl to the block device interface,
30 * as any other ide device.
31 *
32 * Our own ide-tape ioctl's can be issued to either the block device or
33 * the character device interface.
34 *
35 * Maximal throughput with minimal bus load will usually be achieved in the
36 * following scenario:
37 *
38 * 1. ide-tape is operating in the pipelined operation mode.
39 * 2. No buffering is performed by the user backup program.
40 *
41 * Testing was done with a 2 GB CONNER CTMA 4000 IDE ATAPI Streaming Tape Drive.
42 *
43 * Here are some words from the first releases of hd.c, which are quoted
44 * in ide.c and apply here as well:
45 *
46 * | Special care is recommended. Have Fun!
47 *
48 *
49 * An overview of the pipelined operation mode.
50 *
51 * In the pipelined write mode, we will usually just add requests to our
52 * pipeline and return immediately, before we even start to service them. The
53 * user program will then have enough time to prepare the next request while
54 * we are still busy servicing previous requests. In the pipelined read mode,
55 * the situation is similar - we add read-ahead requests into the pipeline,
56 * before the user even requested them.
57 *
58 * The pipeline can be viewed as a "safety net" which will be activated when
59 * the system load is high and prevents the user backup program from keeping up
60 * with the current tape speed. At this point, the pipeline will get
61 * shorter and shorter but the tape will still be streaming at the same speed.
62 * Assuming we have enough pipeline stages, the system load will hopefully
63 * decrease before the pipeline is completely empty, and the backup program
64 * will be able to "catch up" and refill the pipeline again.
65 *
66 * When using the pipelined mode, it would be best to disable any type of
67 * buffering done by the user program, as ide-tape already provides all the
68 * benefits in the kernel, where it can be done in a more efficient way.
69 * As we will usually not block the user program on a request, the most
70 * efficient user code will then be a simple read-write-read-... cycle.
71 * Any additional logic will usually just slow down the backup process.
72 *
73 * Using the pipelined mode, I get a constant over 400 KBps throughput,
74 * which seems to be the maximum throughput supported by my tape.
75 *
76 * However, there are some downfalls:
77 *
78 * 1. We use memory (for data buffers) in proportional to the number
79 * of pipeline stages (each stage is about 26 KB with my tape).
80 * 2. In the pipelined write mode, we cheat and postpone error codes
81 * to the user task. In read mode, the actual tape position
82 * will be a bit further than the last requested block.
83 *
84 * Concerning (1):
85 *
86 * 1. We allocate stages dynamically only when we need them. When
87 * we don't need them, we don't consume additional memory. In
88 * case we can't allocate stages, we just manage without them
89 * (at the expense of decreased throughput) so when Linux is
90 * tight in memory, we will not pose additional difficulties.
91 *
92 * 2. The maximum number of stages (which is, in fact, the maximum
93 * amount of memory) which we allocate is limited by the compile
94 * time parameter IDETAPE_MAX_PIPELINE_STAGES.
95 *
96 * 3. The maximum number of stages is a controlled parameter - We
97 * don't start from the user defined maximum number of stages
98 * but from the lower IDETAPE_MIN_PIPELINE_STAGES (again, we
99 * will not even allocate this amount of stages if the user
100 * program can't handle the speed). We then implement a feedback
101 * loop which checks if the pipeline is empty, and if it is, we
102 * increase the maximum number of stages as necessary until we
103 * reach the optimum value which just manages to keep the tape
104 * busy with minimum allocated memory or until we reach
105 * IDETAPE_MAX_PIPELINE_STAGES.
106 *
107 * Concerning (2):
108 *
109 * In pipelined write mode, ide-tape can not return accurate error codes
110 * to the user program since we usually just add the request to the
111 * pipeline without waiting for it to be serviced. In case an error
112 * occurs, I will report it on the next user request.
113 *
114 * In the pipelined read mode, subsequent read requests or forward
115 * filemark spacing will perform correctly, as we preserve all blocks
116 * and filemarks which we encountered during our excess read-ahead.
117 *
118 * For accurate tape positioning and error reporting, disabling
119 * pipelined mode might be the best option.
120 *
121 * You can enable/disable/tune the pipelined operation mode by adjusting
122 * the compile time parameters below.
123 *
124 *
125 * Possible improvements.
126 *
127 * 1. Support for the ATAPI overlap protocol.
128 *
129 * In order to maximize bus throughput, we currently use the DSC
130 * overlap method which enables ide.c to service requests from the
131 * other device while the tape is busy executing a command. The
132 * DSC overlap method involves polling the tape's status register
133 * for the DSC bit, and servicing the other device while the tape
134 * isn't ready.
135 *
136 * In the current QIC development standard (December 1995),
137 * it is recommended that new tape drives will *in addition*
138 * implement the ATAPI overlap protocol, which is used for the
139 * same purpose - efficient use of the IDE bus, but is interrupt
140 * driven and thus has much less CPU overhead.
141 *
142 * ATAPI overlap is likely to be supported in most new ATAPI
143 * devices, including new ATAPI cdroms, and thus provides us
144 * a method by which we can achieve higher throughput when
145 * sharing a (fast) ATA-2 disk with any (slow) new ATAPI device.
146 */
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
index e42a465f5717..45b26ed351cf 100644
--- a/drivers/ide/Kconfig
+++ b/drivers/ide/Kconfig
@@ -216,8 +216,7 @@ config BLK_DEV_IDECD_VERBOSE_ERRORS
216 memory, though. 216 memory, though.
217 217
218config BLK_DEV_IDETAPE 218config BLK_DEV_IDETAPE
219 tristate "Include IDE/ATAPI TAPE support (EXPERIMENTAL)" 219 tristate "Include IDE/ATAPI TAPE support"
220 depends on EXPERIMENTAL
221 help 220 help
222 If you have an IDE tape drive using the ATAPI protocol, say Y. 221 If you have an IDE tape drive using the ATAPI protocol, say Y.
223 ATAPI is a newer protocol used by IDE tape and CD-ROM drives, 222 ATAPI is a newer protocol used by IDE tape and CD-ROM drives,
diff --git a/drivers/ide/arm/bast-ide.c b/drivers/ide/arm/bast-ide.c
index 037300fa284c..0e7574c0ee60 100644
--- a/drivers/ide/arm/bast-ide.c
+++ b/drivers/ide/arm/bast-ide.c
@@ -28,8 +28,10 @@ static int __init
28bastide_register(unsigned int base, unsigned int aux, int irq, 28bastide_register(unsigned int base, unsigned int aux, int irq,
29 ide_hwif_t **hwif) 29 ide_hwif_t **hwif)
30{ 30{
31 ide_hwif_t *hwif;
31 hw_regs_t hw; 32 hw_regs_t hw;
32 int i; 33 int i;
34 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
33 35
34 memset(&hw, 0, sizeof(hw)); 36 memset(&hw, 0, sizeof(hw));
35 37
@@ -44,8 +46,24 @@ bastide_register(unsigned int base, unsigned int aux, int irq,
44 hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20); 46 hw.io_ports[IDE_CONTROL_OFFSET] = aux + (6 * 0x20);
45 hw.irq = irq; 47 hw.irq = irq;
46 48
47 ide_register_hw(&hw, NULL, hwif); 49 hwif = ide_deprecated_find_port(hw.io_ports[IDE_DATA_OFFSET]);
50 if (hwif == NULL)
51 goto out;
48 52
53 i = hwif->index;
54
55 if (hwif->present)
56 ide_unregister(i, 0, 0);
57 else if (!hwif->hold)
58 ide_init_port_data(hwif, i);
59
60 ide_init_port_hw(hwif, &hw);
61 hwif->quirkproc = NULL;
62
63 idx[0] = i;
64
65 ide_device_add(idx, NULL);
66out:
49 return 0; 67 return 0;
50} 68}
51 69
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c
index 8d2cc47a362e..fb00f3827ecd 100644
--- a/drivers/ide/arm/icside.c
+++ b/drivers/ide/arm/icside.c
@@ -377,9 +377,6 @@ static void icside_dma_lost_irq(ide_drive_t *drive)
377 377
378static void icside_dma_init(ide_hwif_t *hwif) 378static void icside_dma_init(ide_hwif_t *hwif)
379{ 379{
380 hwif->mwdma_mask = 7; /* MW0..2 */
381 hwif->swdma_mask = 7; /* SW0..2 */
382
383 hwif->dmatable_cpu = NULL; 380 hwif->dmatable_cpu = NULL;
384 hwif->dmatable_dma = 0; 381 hwif->dmatable_dma = 0;
385 hwif->set_dma_mode = icside_set_dma_mode; 382 hwif->set_dma_mode = icside_set_dma_mode;
@@ -459,11 +456,19 @@ icside_register_v5(struct icside_state *state, struct expansion_card *ec)
459 456
460 idx[0] = hwif->index; 457 idx[0] = hwif->index;
461 458
462 ide_device_add(idx); 459 ide_device_add(idx, NULL);
463 460
464 return 0; 461 return 0;
465} 462}
466 463
464static const struct ide_port_info icside_v6_port_info __initdata = {
465 .host_flags = IDE_HFLAG_SERIALIZE |
466 IDE_HFLAG_NO_DMA | /* no SFF-style DMA */
467 IDE_HFLAG_NO_AUTOTUNE,
468 .mwdma_mask = ATA_MWDMA2,
469 .swdma_mask = ATA_SWDMA2,
470};
471
467static int __init 472static int __init
468icside_register_v6(struct icside_state *state, struct expansion_card *ec) 473icside_register_v6(struct icside_state *state, struct expansion_card *ec)
469{ 474{
@@ -472,6 +477,7 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
472 unsigned int sel = 0; 477 unsigned int sel = 0;
473 int ret; 478 int ret;
474 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; 479 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
480 struct ide_port_info d = icside_v6_port_info;
475 481
476 ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0); 482 ioc_base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0);
477 if (!ioc_base) { 483 if (!ioc_base) {
@@ -521,30 +527,25 @@ icside_register_v6(struct icside_state *state, struct expansion_card *ec)
521 state->hwif[1] = mate; 527 state->hwif[1] = mate;
522 528
523 hwif->maskproc = icside_maskproc; 529 hwif->maskproc = icside_maskproc;
524 hwif->channel = 0;
525 hwif->hwif_data = state; 530 hwif->hwif_data = state;
526 hwif->mate = mate;
527 hwif->serialized = 1;
528 hwif->config_data = (unsigned long)ioc_base; 531 hwif->config_data = (unsigned long)ioc_base;
529 hwif->select_data = sel; 532 hwif->select_data = sel;
530 533
531 mate->maskproc = icside_maskproc; 534 mate->maskproc = icside_maskproc;
532 mate->channel = 1;
533 mate->hwif_data = state; 535 mate->hwif_data = state;
534 mate->mate = hwif;
535 mate->serialized = 1;
536 mate->config_data = (unsigned long)ioc_base; 536 mate->config_data = (unsigned long)ioc_base;
537 mate->select_data = sel | 1; 537 mate->select_data = sel | 1;
538 538
539 if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) { 539 if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) {
540 icside_dma_init(hwif); 540 icside_dma_init(hwif);
541 icside_dma_init(mate); 541 icside_dma_init(mate);
542 } 542 } else
543 d.mwdma_mask = d.swdma_mask = 0;
543 544
544 idx[0] = hwif->index; 545 idx[0] = hwif->index;
545 idx[1] = mate->index; 546 idx[1] = mate->index;
546 547
547 ide_device_add(idx); 548 ide_device_add(idx, &d);
548 549
549 return 0; 550 return 0;
550 551
diff --git a/drivers/ide/arm/ide_arm.c b/drivers/ide/arm/ide_arm.c
index 60f2497542c0..43a70e91363e 100644
--- a/drivers/ide/arm/ide_arm.c
+++ b/drivers/ide/arm/ide_arm.c
@@ -39,7 +39,7 @@ static int __init ide_arm_init(void)
39 ide_init_port_hw(hwif, &hw); 39 ide_init_port_hw(hwif, &hw);
40 idx[0] = hwif->index; 40 idx[0] = hwif->index;
41 41
42 ide_device_add(idx); 42 ide_device_add(idx, NULL);
43 } 43 }
44 44
45 return 0; 45 return 0;
diff --git a/drivers/ide/arm/rapide.c b/drivers/ide/arm/rapide.c
index c8b6581e624e..efba00d2fc37 100644
--- a/drivers/ide/arm/rapide.c
+++ b/drivers/ide/arm/rapide.c
@@ -58,7 +58,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)
58 58
59 idx[0] = hwif->index; 59 idx[0] = hwif->index;
60 60
61 ide_device_add(idx); 61 ide_device_add(idx, NULL);
62 62
63 ecard_set_drvdata(ec, hwif); 63 ecard_set_drvdata(ec, hwif);
64 goto out; 64 goto out;
@@ -76,7 +76,7 @@ static void __devexit rapide_remove(struct expansion_card *ec)
76 76
77 ecard_set_drvdata(ec, NULL); 77 ecard_set_drvdata(ec, NULL);
78 78
79 ide_unregister(hwif->index); 79 ide_unregister(hwif->index, 0, 0);
80 80
81 ecard_release_resources(ec); 81 ecard_release_resources(ec);
82} 82}
diff --git a/drivers/ide/cris/ide-cris.c b/drivers/ide/cris/ide-cris.c
index 0640a38ff127..00587a8c2ba1 100644
--- a/drivers/ide/cris/ide-cris.c
+++ b/drivers/ide/cris/ide-cris.c
@@ -753,6 +753,15 @@ static void cris_set_dma_mode(ide_drive_t *drive, const u8 speed)
753 cris_ide_set_speed(TYPE_DMA, 0, strobe, hold); 753 cris_ide_set_speed(TYPE_DMA, 0, strobe, hold);
754} 754}
755 755
756static const struct ide_port_info cris_port_info __initdata = {
757 .chipset = ide_etrax100,
758 .host_flags = IDE_HFLAG_NO_ATAPI_DMA |
759 IDE_HFLAG_NO_DMA, /* no SFF-style DMA */
760 .pio_mask = ATA_PIO4,
761 .udma_mask = cris_ultra_mask,
762 .mwdma_mask = ATA_MWDMA2,
763};
764
756static int __init init_e100_ide(void) 765static int __init init_e100_ide(void)
757{ 766{
758 hw_regs_t hw; 767 hw_regs_t hw;
@@ -780,7 +789,6 @@ static int __init init_e100_ide(void)
780 ide_init_port_data(hwif, hwif->index); 789 ide_init_port_data(hwif, hwif->index);
781 ide_init_port_hw(hwif, &hw); 790 ide_init_port_hw(hwif, &hw);
782 hwif->mmio = 1; 791 hwif->mmio = 1;
783 hwif->chipset = ide_etrax100;
784 hwif->set_pio_mode = &cris_set_pio_mode; 792 hwif->set_pio_mode = &cris_set_pio_mode;
785 hwif->set_dma_mode = &cris_set_dma_mode; 793 hwif->set_dma_mode = &cris_set_dma_mode;
786 hwif->ata_input_data = &cris_ide_input_data; 794 hwif->ata_input_data = &cris_ide_input_data;
@@ -799,12 +807,6 @@ static int __init init_e100_ide(void)
799 hwif->INB = &cris_ide_inb; 807 hwif->INB = &cris_ide_inb;
800 hwif->INW = &cris_ide_inw; 808 hwif->INW = &cris_ide_inw;
801 hwif->cbl = ATA_CBL_PATA40; 809 hwif->cbl = ATA_CBL_PATA40;
802 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
803 hwif->pio_mask = ATA_PIO4,
804 hwif->drives[0].autotune = 1;
805 hwif->drives[1].autotune = 1;
806 hwif->ultra_mask = cris_ultra_mask;
807 hwif->mwdma_mask = 0x07; /* Multiword DMA 0-2 */
808 810
809 idx[h] = hwif->index; 811 idx[h] = hwif->index;
810 } 812 }
@@ -820,7 +822,7 @@ static int __init init_e100_ide(void)
820 cris_ide_set_speed(TYPE_DMA, 0, ATA_DMA2_STROBE, ATA_DMA2_HOLD); 822 cris_ide_set_speed(TYPE_DMA, 0, ATA_DMA2_STROBE, ATA_DMA2_HOLD);
821 cris_ide_set_speed(TYPE_UDMA, ATA_UDMA2_CYC, ATA_UDMA2_DVS, 0); 823 cris_ide_set_speed(TYPE_UDMA, ATA_UDMA2_CYC, ATA_UDMA2_DVS, 0);
822 824
823 ide_device_add(idx); 825 ide_device_add(idx, &cris_port_info);
824 826
825 return 0; 827 return 0;
826} 828}
@@ -1032,11 +1034,7 @@ static int cris_dma_setup(ide_drive_t *drive)
1032 1034
1033static void cris_dma_exec_cmd(ide_drive_t *drive, u8 command) 1035static void cris_dma_exec_cmd(ide_drive_t *drive, u8 command)
1034{ 1036{
1035 /* set the irq handler which will finish the request when DMA is done */ 1037 ide_execute_command(drive, command, &cris_dma_intr, WAIT_CMD, NULL);
1036 ide_set_handler(drive, &cris_dma_intr, WAIT_CMD, NULL);
1037
1038 /* issue cmd to drive */
1039 cris_ide_outb(command, IDE_COMMAND_REG);
1040} 1038}
1041 1039
1042static void cris_dma_start(ide_drive_t *drive) 1040static void cris_dma_start(ide_drive_t *drive)
diff --git a/drivers/ide/h8300/ide-h8300.c b/drivers/ide/h8300/ide-h8300.c
index 02432958dfe1..520aec075700 100644
--- a/drivers/ide/h8300/ide-h8300.c
+++ b/drivers/ide/h8300/ide-h8300.c
@@ -114,7 +114,7 @@ static int __init h8300_ide_init(void)
114 114
115 idx[0] = index; 115 idx[0] = index;
116 116
117 ide_device_add(idx); 117 ide_device_add(idx, NULL);
118 118
119 return 0; 119 return 0;
120 120
diff --git a/drivers/ide/ide-acpi.c b/drivers/ide/ide-acpi.c
index 68bc61844780..25aaeae1e830 100644
--- a/drivers/ide/ide-acpi.c
+++ b/drivers/ide/ide-acpi.c
@@ -39,7 +39,6 @@ struct GTM_buffer {
39}; 39};
40 40
41struct ide_acpi_drive_link { 41struct ide_acpi_drive_link {
42 ide_drive_t *drive;
43 acpi_handle obj_handle; 42 acpi_handle obj_handle;
44 u8 idbuff[512]; 43 u8 idbuff[512];
45}; 44};
@@ -280,16 +279,6 @@ static int do_drive_get_GTF(ide_drive_t *drive,
280 279
281 port = hwif->channel ? drive->dn - 2: drive->dn; 280 port = hwif->channel ? drive->dn - 2: drive->dn;
282 281
283 if (!drive->acpidata) {
284 if (port == 0) {
285 drive->acpidata = &hwif->acpidata->master;
286 hwif->acpidata->master.drive = drive;
287 } else {
288 drive->acpidata = &hwif->acpidata->slave;
289 hwif->acpidata->slave.drive = drive;
290 }
291 }
292
293 DEBPRINT("ENTER: %s at %s, port#: %d, hard_port#: %d\n", 282 DEBPRINT("ENTER: %s at %s, port#: %d, hard_port#: %d\n",
294 hwif->name, dev->bus_id, port, hwif->channel); 283 hwif->name, dev->bus_id, port, hwif->channel);
295 284
@@ -494,7 +483,6 @@ int ide_acpi_exec_tfs(ide_drive_t *drive)
494 483
495 return ret; 484 return ret;
496} 485}
497EXPORT_SYMBOL_GPL(ide_acpi_exec_tfs);
498 486
499/** 487/**
500 * ide_acpi_get_timing - get the channel (controller) timings 488 * ide_acpi_get_timing - get the channel (controller) timings
@@ -580,7 +568,6 @@ void ide_acpi_get_timing(ide_hwif_t *hwif)
580 568
581 kfree(output.pointer); 569 kfree(output.pointer);
582} 570}
583EXPORT_SYMBOL_GPL(ide_acpi_get_timing);
584 571
585/** 572/**
586 * ide_acpi_push_timing - set the channel (controller) timings 573 * ide_acpi_push_timing - set the channel (controller) timings
@@ -634,7 +621,6 @@ void ide_acpi_push_timing(ide_hwif_t *hwif)
634 } 621 }
635 DEBPRINT("_STM status: %d\n", status); 622 DEBPRINT("_STM status: %d\n", status);
636} 623}
637EXPORT_SYMBOL_GPL(ide_acpi_push_timing);
638 624
639/** 625/**
640 * ide_acpi_set_state - set the channel power state 626 * ide_acpi_set_state - set the channel power state
@@ -688,11 +674,6 @@ void ide_acpi_set_state(ide_hwif_t *hwif, int on)
688 */ 674 */
689void ide_acpi_init(ide_hwif_t *hwif) 675void ide_acpi_init(ide_hwif_t *hwif)
690{ 676{
691 int unit;
692 int err;
693 struct ide_acpi_drive_link *master;
694 struct ide_acpi_drive_link *slave;
695
696 ide_acpi_blacklist(); 677 ide_acpi_blacklist();
697 678
698 hwif->acpidata = kzalloc(sizeof(struct ide_acpi_hwif_link), GFP_KERNEL); 679 hwif->acpidata = kzalloc(sizeof(struct ide_acpi_hwif_link), GFP_KERNEL);
@@ -704,40 +685,38 @@ void ide_acpi_init(ide_hwif_t *hwif)
704 DEBPRINT("no ACPI object for %s found\n", hwif->name); 685 DEBPRINT("no ACPI object for %s found\n", hwif->name);
705 kfree(hwif->acpidata); 686 kfree(hwif->acpidata);
706 hwif->acpidata = NULL; 687 hwif->acpidata = NULL;
707 return;
708 } 688 }
689}
690
691void ide_acpi_port_init_devices(ide_hwif_t *hwif)
692{
693 ide_drive_t *drive;
694 int i, err;
695
696 if (hwif->acpidata == NULL)
697 return;
709 698
710 /* 699 /*
711 * The ACPI spec mandates that we send information 700 * The ACPI spec mandates that we send information
712 * for both drives, regardless whether they are connected 701 * for both drives, regardless whether they are connected
713 * or not. 702 * or not.
714 */ 703 */
715 hwif->acpidata->master.drive = &hwif->drives[0];
716 hwif->drives[0].acpidata = &hwif->acpidata->master; 704 hwif->drives[0].acpidata = &hwif->acpidata->master;
717 master = &hwif->acpidata->master;
718
719 hwif->acpidata->slave.drive = &hwif->drives[1];
720 hwif->drives[1].acpidata = &hwif->acpidata->slave; 705 hwif->drives[1].acpidata = &hwif->acpidata->slave;
721 slave = &hwif->acpidata->slave;
722
723 706
724 /* 707 /*
725 * Send IDENTIFY for each drive 708 * Send IDENTIFY for each drive
726 */ 709 */
727 if (master->drive->present) { 710 for (i = 0; i < MAX_DRIVES; i++) {
728 err = taskfile_lib_get_identify(master->drive, master->idbuff); 711 drive = &hwif->drives[i];
729 if (err) { 712
730 DEBPRINT("identify device %s failed (%d)\n", 713 if (!drive->present)
731 master->drive->name, err); 714 continue;
732 }
733 }
734 715
735 if (slave->drive->present) { 716 err = taskfile_lib_get_identify(drive, drive->acpidata->idbuff);
736 err = taskfile_lib_get_identify(slave->drive, slave->idbuff); 717 if (err)
737 if (err) {
738 DEBPRINT("identify device %s failed (%d)\n", 718 DEBPRINT("identify device %s failed (%d)\n",
739 slave->drive->name, err); 719 drive->name, err);
740 }
741 } 720 }
742 721
743 if (ide_noacpionboot) { 722 if (ide_noacpionboot) {
@@ -753,13 +732,11 @@ void ide_acpi_init(ide_hwif_t *hwif)
753 ide_acpi_get_timing(hwif); 732 ide_acpi_get_timing(hwif);
754 ide_acpi_push_timing(hwif); 733 ide_acpi_push_timing(hwif);
755 734
756 for (unit = 0; unit < MAX_DRIVES; ++unit) { 735 for (i = 0; i < MAX_DRIVES; i++) {
757 ide_drive_t *drive = &hwif->drives[unit]; 736 drive = &hwif->drives[i];
758 737
759 if (drive->present) { 738 if (drive->present)
760 /* Execute ACPI startup code */ 739 /* Execute ACPI startup code */
761 ide_acpi_exec_tfs(drive); 740 ide_acpi_exec_tfs(drive);
762 }
763 } 741 }
764} 742}
765EXPORT_SYMBOL_GPL(ide_acpi_init);
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 23074e84472e..ee4d458e2bbf 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -604,8 +604,6 @@ static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive,
604 * Block read functions. 604 * Block read functions.
605 */ 605 */
606 606
607typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
608
609static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len) 607static void ide_cd_pad_transfer(ide_drive_t *drive, xfer_func_t *xf, int len)
610{ 608{
611 while (len > 0) { 609 while (len > 0) {
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 7beaf1e9be12..3cf59f2c3928 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -819,6 +819,26 @@ int ide_set_dma(ide_drive_t *drive)
819 return 0; 819 return 0;
820} 820}
821 821
822void ide_check_dma_crc(ide_drive_t *drive)
823{
824 u8 mode;
825
826 ide_dma_off_quietly(drive);
827 drive->crc_count = 0;
828 mode = drive->current_speed;
829 /*
830 * Don't try non Ultra-DMA modes without iCRC's. Force the
831 * device to PIO and make the user enable SWDMA/MWDMA modes.
832 */
833 if (mode > XFER_UDMA_0 && mode <= XFER_UDMA_7)
834 mode--;
835 else
836 mode = XFER_PIO_4;
837 ide_set_xfer_rate(drive, mode);
838 if (drive->current_speed >= XFER_SW_DMA_0)
839 ide_dma_on(drive);
840}
841
822#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 842#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
823void ide_dma_lost_irq (ide_drive_t *drive) 843void ide_dma_lost_irq (ide_drive_t *drive)
824{ 844{
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 3512637ae8d4..f8fe6ee128f3 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -4,11 +4,6 @@
4 * Copyright (C) 1996-1999 Gadi Oxman <gadio@netvision.net.il> 4 * Copyright (C) 1996-1999 Gadi Oxman <gadio@netvision.net.il>
5 * Copyright (C) 2000-2002 Paul Bristow <paul@paulbristow.net> 5 * Copyright (C) 2000-2002 Paul Bristow <paul@paulbristow.net>
6 * Copyright (C) 2005 Bartlomiej Zolnierkiewicz 6 * Copyright (C) 2005 Bartlomiej Zolnierkiewicz
7 */
8
9/*
10 * The driver currently doesn't have any fancy features, just the bare
11 * minimum read/write support.
12 * 7 *
13 * This driver supports the following IDE floppy drives: 8 * This driver supports the following IDE floppy drives:
14 * 9 *
@@ -20,7 +15,7 @@
20 * Documentation/ide/ChangeLog.ide-floppy.1996-2002 15 * Documentation/ide/ChangeLog.ide-floppy.1996-2002
21 */ 16 */
22 17
23#define IDEFLOPPY_VERSION "0.99.newide" 18#define IDEFLOPPY_VERSION "1.00"
24 19
25#include <linux/module.h> 20#include <linux/module.h>
26#include <linux/types.h> 21#include <linux/types.h>
@@ -42,179 +37,91 @@
42#include <scsi/scsi_ioctl.h> 37#include <scsi/scsi_ioctl.h>
43 38
44#include <asm/byteorder.h> 39#include <asm/byteorder.h>
45#include <asm/irq.h> 40#include <linux/irq.h>
46#include <asm/uaccess.h> 41#include <linux/uaccess.h>
47#include <asm/io.h> 42#include <linux/io.h>
48#include <asm/unaligned.h> 43#include <asm/unaligned.h>
49 44
50/* 45/* define to see debug info */
51 * The following are used to debug the driver.
52 */
53#define IDEFLOPPY_DEBUG_LOG 0 46#define IDEFLOPPY_DEBUG_LOG 0
54#define IDEFLOPPY_DEBUG_INFO 0
55#define IDEFLOPPY_DEBUG_BUGS 1
56 47
57/* #define IDEFLOPPY_DEBUG(fmt, args...) printk(KERN_INFO fmt, ## args) */ 48/* #define IDEFLOPPY_DEBUG(fmt, args...) printk(KERN_INFO fmt, ## args) */
58#define IDEFLOPPY_DEBUG( fmt, args... ) 49#define IDEFLOPPY_DEBUG(fmt, args...)
59 50
60#if IDEFLOPPY_DEBUG_LOG 51#if IDEFLOPPY_DEBUG_LOG
61#define debug_log printk 52#define debug_log(fmt, args...) \
53 printk(KERN_INFO "ide-floppy: " fmt, ## args)
62#else 54#else
63#define debug_log(fmt, args... ) do {} while(0) 55#define debug_log(fmt, args...) do {} while (0)
64#endif 56#endif
65 57
66 58
67/* 59/* Some drives require a longer irq timeout. */
68 * Some drives require a longer irq timeout.
69 */
70#define IDEFLOPPY_WAIT_CMD (5 * WAIT_CMD) 60#define IDEFLOPPY_WAIT_CMD (5 * WAIT_CMD)
71 61
72/* 62/*
73 * After each failed packet command we issue a request sense command 63 * After each failed packet command we issue a request sense command and retry
74 * and retry the packet command IDEFLOPPY_MAX_PC_RETRIES times. 64 * the packet command IDEFLOPPY_MAX_PC_RETRIES times.
75 */ 65 */
76#define IDEFLOPPY_MAX_PC_RETRIES 3 66#define IDEFLOPPY_MAX_PC_RETRIES 3
77 67
78/* 68/*
79 * With each packet command, we allocate a buffer of 69 * With each packet command, we allocate a buffer of IDEFLOPPY_PC_BUFFER_SIZE
80 * IDEFLOPPY_PC_BUFFER_SIZE bytes. 70 * bytes.
81 */ 71 */
82#define IDEFLOPPY_PC_BUFFER_SIZE 256 72#define IDEFLOPPY_PC_BUFFER_SIZE 256
83 73
84/* 74/*
85 * In various places in the driver, we need to allocate storage 75 * In various places in the driver, we need to allocate storage for packet
86 * for packet commands and requests, which will remain valid while 76 * commands and requests, which will remain valid while we leave the driver to
87 * we leave the driver to wait for an interrupt or a timeout event. 77 * wait for an interrupt or a timeout event.
88 */ 78 */
89#define IDEFLOPPY_PC_STACK (10 + IDEFLOPPY_MAX_PC_RETRIES) 79#define IDEFLOPPY_PC_STACK (10 + IDEFLOPPY_MAX_PC_RETRIES)
90 80
91/*
92 * Our view of a packet command.
93 */
94typedef struct idefloppy_packet_command_s { 81typedef struct idefloppy_packet_command_s {
95 u8 c[12]; /* Actual packet bytes */ 82 u8 c[12]; /* Actual packet bytes */
96 int retries; /* On each retry, we increment retries */ 83 int retries; /* On each retry, we increment
84 retries */
97 int error; /* Error code */ 85 int error; /* Error code */
98 int request_transfer; /* Bytes to transfer */ 86 int request_transfer; /* Bytes to transfer */
99 int actually_transferred; /* Bytes actually transferred */ 87 int actually_transferred; /* Bytes actually transferred */
100 int buffer_size; /* Size of our data buffer */ 88 int buffer_size; /* Size of our data buffer */
101 int b_count; /* Missing/Available data on the current buffer */ 89 int b_count; /* Missing/Available data on
90 the current buffer */
102 struct request *rq; /* The corresponding request */ 91 struct request *rq; /* The corresponding request */
103 u8 *buffer; /* Data buffer */ 92 u8 *buffer; /* Data buffer */
104 u8 *current_position; /* Pointer into the above buffer */ 93 u8 *current_position; /* Pointer into above buffer */
105 void (*callback) (ide_drive_t *); /* Called when this packet command is completed */ 94 void (*callback) (ide_drive_t *); /* Called when this packet
95 command is completed */
106 u8 pc_buffer[IDEFLOPPY_PC_BUFFER_SIZE]; /* Temporary buffer */ 96 u8 pc_buffer[IDEFLOPPY_PC_BUFFER_SIZE]; /* Temporary buffer */
107 unsigned long flags; /* Status/Action bit flags: long for set_bit */ 97 unsigned long flags; /* Status/Action bit flags: long
98 for set_bit */
108} idefloppy_pc_t; 99} idefloppy_pc_t;
109 100
110/* 101/* Packet command flag bits. */
111 * Packet command flag bits. 102enum {
112 */ 103 /* 1 when we prefer to use DMA if possible */
113#define PC_ABORT 0 /* Set when an error is considered normal - We won't retry */ 104 PC_FLAG_DMA_RECOMMENDED = (1 << 0),
114#define PC_DMA_RECOMMENDED 2 /* 1 when we prefer to use DMA if possible */ 105 /* 1 while DMA in progress */
115#define PC_DMA_IN_PROGRESS 3 /* 1 while DMA in progress */ 106 PC_FLAG_DMA_IN_PROGRESS = (1 << 1),
116#define PC_DMA_ERROR 4 /* 1 when encountered problem during DMA */ 107 /* 1 when encountered problem during DMA */
117#define PC_WRITING 5 /* Data direction */ 108 PC_FLAG_DMA_ERROR = (1 << 2),
118 109 /* Data direction */
119#define PC_SUPPRESS_ERROR 6 /* Suppress error reporting */ 110 PC_FLAG_WRITING = (1 << 3),
120 111 /* Suppress error reporting */
121/* 112 PC_FLAG_SUPPRESS_ERROR = (1 << 4),
122 * Removable Block Access Capabilities Page 113};
123 */
124typedef struct {
125#if defined(__LITTLE_ENDIAN_BITFIELD)
126 unsigned page_code :6; /* Page code - Should be 0x1b */
127 unsigned reserved1_6 :1; /* Reserved */
128 unsigned ps :1; /* Should be 0 */
129#elif defined(__BIG_ENDIAN_BITFIELD)
130 unsigned ps :1; /* Should be 0 */
131 unsigned reserved1_6 :1; /* Reserved */
132 unsigned page_code :6; /* Page code - Should be 0x1b */
133#else
134#error "Bitfield endianness not defined! Check your byteorder.h"
135#endif
136 u8 page_length; /* Page Length - Should be 0xa */
137#if defined(__LITTLE_ENDIAN_BITFIELD)
138 unsigned reserved2 :6;
139 unsigned srfp :1; /* Supports reporting progress of format */
140 unsigned sflp :1; /* System floppy type device */
141 unsigned tlun :3; /* Total logical units supported by the device */
142 unsigned reserved3 :3;
143 unsigned sml :1; /* Single / Multiple lun supported */
144 unsigned ncd :1; /* Non cd optical device */
145#elif defined(__BIG_ENDIAN_BITFIELD)
146 unsigned sflp :1; /* System floppy type device */
147 unsigned srfp :1; /* Supports reporting progress of format */
148 unsigned reserved2 :6;
149 unsigned ncd :1; /* Non cd optical device */
150 unsigned sml :1; /* Single / Multiple lun supported */
151 unsigned reserved3 :3;
152 unsigned tlun :3; /* Total logical units supported by the device */
153#else
154#error "Bitfield endianness not defined! Check your byteorder.h"
155#endif
156 u8 reserved[8];
157} idefloppy_capabilities_page_t;
158
159/*
160 * Flexible disk page.
161 */
162typedef struct {
163#if defined(__LITTLE_ENDIAN_BITFIELD)
164 unsigned page_code :6; /* Page code - Should be 0x5 */
165 unsigned reserved1_6 :1; /* Reserved */
166 unsigned ps :1; /* The device is capable of saving the page */
167#elif defined(__BIG_ENDIAN_BITFIELD)
168 unsigned ps :1; /* The device is capable of saving the page */
169 unsigned reserved1_6 :1; /* Reserved */
170 unsigned page_code :6; /* Page code - Should be 0x5 */
171#else
172#error "Bitfield endianness not defined! Check your byteorder.h"
173#endif
174 u8 page_length; /* Page Length - Should be 0x1e */
175 u16 transfer_rate; /* In kilobits per second */
176 u8 heads, sectors; /* Number of heads, Number of sectors per track */
177 u16 sector_size; /* Byes per sector */
178 u16 cyls; /* Number of cylinders */
179 u8 reserved10[10];
180 u8 motor_delay; /* Motor off delay */
181 u8 reserved21[7];
182 u16 rpm; /* Rotations per minute */
183 u8 reserved30[2];
184} idefloppy_flexible_disk_page_t;
185
186/*
187 * Format capacity
188 */
189typedef struct {
190 u8 reserved[3];
191 u8 length; /* Length of the following descriptors in bytes */
192} idefloppy_capacity_header_t;
193
194typedef struct {
195 u32 blocks; /* Number of blocks */
196#if defined(__LITTLE_ENDIAN_BITFIELD)
197 unsigned dc :2; /* Descriptor Code */
198 unsigned reserved :6;
199#elif defined(__BIG_ENDIAN_BITFIELD)
200 unsigned reserved :6;
201 unsigned dc :2; /* Descriptor Code */
202#else
203#error "Bitfield endianness not defined! Check your byteorder.h"
204#endif
205 u8 length_msb; /* Block Length (MSB)*/
206 u16 length; /* Block Length */
207} idefloppy_capacity_descriptor_t;
208 114
115/* format capacities descriptor codes */
209#define CAPACITY_INVALID 0x00 116#define CAPACITY_INVALID 0x00
210#define CAPACITY_UNFORMATTED 0x01 117#define CAPACITY_UNFORMATTED 0x01
211#define CAPACITY_CURRENT 0x02 118#define CAPACITY_CURRENT 0x02
212#define CAPACITY_NO_CARTRIDGE 0x03 119#define CAPACITY_NO_CARTRIDGE 0x03
213 120
214/* 121/*
215 * Most of our global data which we need to save even as we leave the 122 * Most of our global data which we need to save even as we leave the driver
216 * driver due to an interrupt or a timer event is stored in a variable 123 * due to an interrupt or a timer event is stored in a variable of type
217 * of type idefloppy_floppy_t, defined below. 124 * idefloppy_floppy_t, defined below.
218 */ 125 */
219typedef struct ide_floppy_obj { 126typedef struct ide_floppy_obj {
220 ide_drive_t *drive; 127 ide_drive_t *drive;
@@ -235,23 +142,19 @@ typedef struct ide_floppy_obj {
235 /* We implement a circular array */ 142 /* We implement a circular array */
236 int rq_stack_index; 143 int rq_stack_index;
237 144
238 /* 145 /* Last error information */
239 * Last error information
240 */
241 u8 sense_key, asc, ascq; 146 u8 sense_key, asc, ascq;
242 /* delay this long before sending packet command */ 147 /* delay this long before sending packet command */
243 u8 ticks; 148 u8 ticks;
244 int progress_indication; 149 int progress_indication;
245 150
246 /* 151 /* Device information */
247 * Device information
248 */
249 /* Current format */ 152 /* Current format */
250 int blocks, block_size, bs_factor; 153 int blocks, block_size, bs_factor;
251 /* Last format capacity */ 154 /* Last format capacity descriptor */
252 idefloppy_capacity_descriptor_t capacity; 155 u8 cap_desc[8];
253 /* Copy of the flexible disk page */ 156 /* Copy of the flexible disk page */
254 idefloppy_flexible_disk_page_t flexible_disk_page; 157 u8 flexible_disk_page[32];
255 /* Write protect */ 158 /* Write protect */
256 int wp; 159 int wp;
257 /* Supports format progress report */ 160 /* Supports format progress report */
@@ -262,64 +165,40 @@ typedef struct ide_floppy_obj {
262 165
263#define IDEFLOPPY_TICKS_DELAY HZ/20 /* default delay for ZIP 100 (50ms) */ 166#define IDEFLOPPY_TICKS_DELAY HZ/20 /* default delay for ZIP 100 (50ms) */
264 167
265/* 168/* Floppy flag bits values. */
266 * Floppy flag bits values. 169enum {
267 */ 170 /* DRQ interrupt device */
268#define IDEFLOPPY_DRQ_INTERRUPT 0 /* DRQ interrupt device */ 171 IDEFLOPPY_FLAG_DRQ_INTERRUPT = (1 << 0),
269#define IDEFLOPPY_MEDIA_CHANGED 1 /* Media may have changed */ 172 /* Media may have changed */
270#define IDEFLOPPY_USE_READ12 2 /* Use READ12/WRITE12 or READ10/WRITE10 */ 173 IDEFLOPPY_FLAG_MEDIA_CHANGED = (1 << 1),
271#define IDEFLOPPY_FORMAT_IN_PROGRESS 3 /* Format in progress */ 174 /* Format in progress */
272#define IDEFLOPPY_CLIK_DRIVE 4 /* Avoid commands not supported in Clik drive */ 175 IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS = (1 << 2),
273#define IDEFLOPPY_ZIP_DRIVE 5 /* Requires BH algorithm for packets */ 176 /* Avoid commands not supported in Clik drive */
274 177 IDEFLOPPY_FLAG_CLIK_DRIVE = (1 << 3),
275/* 178 /* Requires BH algorithm for packets */
276 * ATAPI floppy drive packet commands 179 IDEFLOPPY_FLAG_ZIP_DRIVE = (1 << 4),
277 */ 180};
278#define IDEFLOPPY_FORMAT_UNIT_CMD 0x04
279#define IDEFLOPPY_INQUIRY_CMD 0x12
280#define IDEFLOPPY_MODE_SELECT_CMD 0x55
281#define IDEFLOPPY_MODE_SENSE_CMD 0x5a
282#define IDEFLOPPY_READ10_CMD 0x28
283#define IDEFLOPPY_READ12_CMD 0xa8
284#define IDEFLOPPY_READ_CAPACITY_CMD 0x23
285#define IDEFLOPPY_REQUEST_SENSE_CMD 0x03
286#define IDEFLOPPY_PREVENT_REMOVAL_CMD 0x1e
287#define IDEFLOPPY_SEEK_CMD 0x2b
288#define IDEFLOPPY_START_STOP_CMD 0x1b
289#define IDEFLOPPY_TEST_UNIT_READY_CMD 0x00
290#define IDEFLOPPY_VERIFY_CMD 0x2f
291#define IDEFLOPPY_WRITE10_CMD 0x2a
292#define IDEFLOPPY_WRITE12_CMD 0xaa
293#define IDEFLOPPY_WRITE_VERIFY_CMD 0x2e
294 181
295/* 182/* Defines for the MODE SENSE command */
296 * Defines for the mode sense command
297 */
298#define MODE_SENSE_CURRENT 0x00 183#define MODE_SENSE_CURRENT 0x00
299#define MODE_SENSE_CHANGEABLE 0x01 184#define MODE_SENSE_CHANGEABLE 0x01
300#define MODE_SENSE_DEFAULT 0x02 185#define MODE_SENSE_DEFAULT 0x02
301#define MODE_SENSE_SAVED 0x03 186#define MODE_SENSE_SAVED 0x03
302 187
303/* 188/* IOCTLs used in low-level formatting. */
304 * IOCTLs used in low-level formatting.
305 */
306
307#define IDEFLOPPY_IOCTL_FORMAT_SUPPORTED 0x4600 189#define IDEFLOPPY_IOCTL_FORMAT_SUPPORTED 0x4600
308#define IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY 0x4601 190#define IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY 0x4601
309#define IDEFLOPPY_IOCTL_FORMAT_START 0x4602 191#define IDEFLOPPY_IOCTL_FORMAT_START 0x4602
310#define IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS 0x4603 192#define IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS 0x4603
311 193
312/* 194/* Error code returned in rq->errors to the higher part of the driver. */
313 * Error codes which are returned in rq->errors to the higher part
314 * of the driver.
315 */
316#define IDEFLOPPY_ERROR_GENERAL 101 195#define IDEFLOPPY_ERROR_GENERAL 101
317 196
318/* 197/*
319 * The following is used to format the general configuration word of 198 * The following is used to format the general configuration word of the
320 * the ATAPI IDENTIFY DEVICE command. 199 * ATAPI IDENTIFY DEVICE command.
321 */ 200 */
322struct idefloppy_id_gcw { 201struct idefloppy_id_gcw {
323#if defined(__LITTLE_ENDIAN_BITFIELD) 202#if defined(__LITTLE_ENDIAN_BITFIELD)
324 unsigned packet_size :2; /* Packet Size */ 203 unsigned packet_size :2; /* Packet Size */
325 unsigned reserved234 :3; /* Reserved */ 204 unsigned reserved234 :3; /* Reserved */
@@ -342,103 +221,12 @@ struct idefloppy_id_gcw {
342}; 221};
343 222
344/* 223/*
345 * INQUIRY packet command - Data Format 224 * Pages of the SELECT SENSE / MODE SENSE packet commands.
346 */ 225 * See SFF-8070i spec.
347typedef struct {
348#if defined(__LITTLE_ENDIAN_BITFIELD)
349 unsigned device_type :5; /* Peripheral Device Type */
350 unsigned reserved0_765 :3; /* Peripheral Qualifier - Reserved */
351 unsigned reserved1_6t0 :7; /* Reserved */
352 unsigned rmb :1; /* Removable Medium Bit */
353 unsigned ansi_version :3; /* ANSI Version */
354 unsigned ecma_version :3; /* ECMA Version */
355 unsigned iso_version :2; /* ISO Version */
356 unsigned response_format :4; /* Response Data Format */
357 unsigned reserved3_45 :2; /* Reserved */
358 unsigned reserved3_6 :1; /* TrmIOP - Reserved */
359 unsigned reserved3_7 :1; /* AENC - Reserved */
360#elif defined(__BIG_ENDIAN_BITFIELD)
361 unsigned reserved0_765 :3; /* Peripheral Qualifier - Reserved */
362 unsigned device_type :5; /* Peripheral Device Type */
363 unsigned rmb :1; /* Removable Medium Bit */
364 unsigned reserved1_6t0 :7; /* Reserved */
365 unsigned iso_version :2; /* ISO Version */
366 unsigned ecma_version :3; /* ECMA Version */
367 unsigned ansi_version :3; /* ANSI Version */
368 unsigned reserved3_7 :1; /* AENC - Reserved */
369 unsigned reserved3_6 :1; /* TrmIOP - Reserved */
370 unsigned reserved3_45 :2; /* Reserved */
371 unsigned response_format :4; /* Response Data Format */
372#else
373#error "Bitfield endianness not defined! Check your byteorder.h"
374#endif
375 u8 additional_length; /* Additional Length (total_length-4) */
376 u8 rsv5, rsv6, rsv7; /* Reserved */
377 u8 vendor_id[8]; /* Vendor Identification */
378 u8 product_id[16]; /* Product Identification */
379 u8 revision_level[4]; /* Revision Level */
380 u8 vendor_specific[20]; /* Vendor Specific - Optional */
381 u8 reserved56t95[40]; /* Reserved - Optional */
382 /* Additional information may be returned */
383} idefloppy_inquiry_result_t;
384
385/*
386 * REQUEST SENSE packet command result - Data Format.
387 */
388typedef struct {
389#if defined(__LITTLE_ENDIAN_BITFIELD)
390 unsigned error_code :7; /* Current error (0x70) */
391 unsigned valid :1; /* The information field conforms to SFF-8070i */
392 u8 reserved1 :8; /* Reserved */
393 unsigned sense_key :4; /* Sense Key */
394 unsigned reserved2_4 :1; /* Reserved */
395 unsigned ili :1; /* Incorrect Length Indicator */
396 unsigned reserved2_67 :2;
397#elif defined(__BIG_ENDIAN_BITFIELD)
398 unsigned valid :1; /* The information field conforms to SFF-8070i */
399 unsigned error_code :7; /* Current error (0x70) */
400 u8 reserved1 :8; /* Reserved */
401 unsigned reserved2_67 :2;
402 unsigned ili :1; /* Incorrect Length Indicator */
403 unsigned reserved2_4 :1; /* Reserved */
404 unsigned sense_key :4; /* Sense Key */
405#else
406#error "Bitfield endianness not defined! Check your byteorder.h"
407#endif
408 u32 information __attribute__ ((packed));
409 u8 asl; /* Additional sense length (n-7) */
410 u32 command_specific; /* Additional command specific information */
411 u8 asc; /* Additional Sense Code */
412 u8 ascq; /* Additional Sense Code Qualifier */
413 u8 replaceable_unit_code; /* Field Replaceable Unit Code */
414 u8 sksv[3];
415 u8 pad[2]; /* Padding to 20 bytes */
416} idefloppy_request_sense_result_t;
417
418/*
419 * Pages of the SELECT SENSE / MODE SENSE packet commands.
420 */ 226 */
421#define IDEFLOPPY_CAPABILITIES_PAGE 0x1b 227#define IDEFLOPPY_CAPABILITIES_PAGE 0x1b
422#define IDEFLOPPY_FLEXIBLE_DISK_PAGE 0x05 228#define IDEFLOPPY_FLEXIBLE_DISK_PAGE 0x05
423 229
424/*
425 * Mode Parameter Header for the MODE SENSE packet command
426 */
427typedef struct {
428 u16 mode_data_length; /* Length of the following data transfer */
429 u8 medium_type; /* Medium Type */
430#if defined(__LITTLE_ENDIAN_BITFIELD)
431 unsigned reserved3 :7;
432 unsigned wp :1; /* Write protect */
433#elif defined(__BIG_ENDIAN_BITFIELD)
434 unsigned wp :1; /* Write protect */
435 unsigned reserved3 :7;
436#else
437#error "Bitfield endianness not defined! Check your byteorder.h"
438#endif
439 u8 reserved[4];
440} idefloppy_mode_parameter_header_t;
441
442static DEFINE_MUTEX(idefloppy_ref_mutex); 230static DEFINE_MUTEX(idefloppy_ref_mutex);
443 231
444#define to_ide_floppy(obj) container_of(obj, struct ide_floppy_obj, kref) 232#define to_ide_floppy(obj) container_of(obj, struct ide_floppy_obj, kref)
@@ -458,39 +246,35 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk)
458 return floppy; 246 return floppy;
459} 247}
460 248
461static void ide_floppy_release(struct kref *); 249static void idefloppy_cleanup_obj(struct kref *);
462 250
463static void ide_floppy_put(struct ide_floppy_obj *floppy) 251static void ide_floppy_put(struct ide_floppy_obj *floppy)
464{ 252{
465 mutex_lock(&idefloppy_ref_mutex); 253 mutex_lock(&idefloppy_ref_mutex);
466 kref_put(&floppy->kref, ide_floppy_release); 254 kref_put(&floppy->kref, idefloppy_cleanup_obj);
467 mutex_unlock(&idefloppy_ref_mutex); 255 mutex_unlock(&idefloppy_ref_mutex);
468} 256}
469 257
470/* 258/*
471 * Too bad. The drive wants to send us data which we are not ready to accept. 259 * Too bad. The drive wants to send us data which we are not ready to accept.
472 * Just throw it away. 260 * Just throw it away.
473 */ 261 */
474static void idefloppy_discard_data (ide_drive_t *drive, unsigned int bcount) 262static void idefloppy_discard_data(ide_drive_t *drive, unsigned int bcount)
475{ 263{
476 while (bcount--) 264 while (bcount--)
477 (void) HWIF(drive)->INB(IDE_DATA_REG); 265 (void) HWIF(drive)->INB(IDE_DATA_REG);
478} 266}
479 267
480#if IDEFLOPPY_DEBUG_BUGS 268static void idefloppy_write_zeros(ide_drive_t *drive, unsigned int bcount)
481static void idefloppy_write_zeros (ide_drive_t *drive, unsigned int bcount)
482{ 269{
483 while (bcount--) 270 while (bcount--)
484 HWIF(drive)->OUTB(0, IDE_DATA_REG); 271 HWIF(drive)->OUTB(0, IDE_DATA_REG);
485} 272}
486#endif /* IDEFLOPPY_DEBUG_BUGS */
487 273
488 274
489/* 275/*
490 * idefloppy_do_end_request is used to finish servicing a request. 276 * Used to finish servicing a request. For read/write requests, we will call
491 * 277 * ide_end_request to pass to the next buffer.
492 * For read/write requests, we will call ide_end_request to pass to the
493 * next buffer.
494 */ 278 */
495static int idefloppy_do_end_request(ide_drive_t *drive, int uptodate, int nsecs) 279static int idefloppy_do_end_request(ide_drive_t *drive, int uptodate, int nsecs)
496{ 280{
@@ -498,12 +282,12 @@ static int idefloppy_do_end_request(ide_drive_t *drive, int uptodate, int nsecs)
498 struct request *rq = HWGROUP(drive)->rq; 282 struct request *rq = HWGROUP(drive)->rq;
499 int error; 283 int error;
500 284
501 debug_log(KERN_INFO "Reached idefloppy_end_request\n"); 285 debug_log("Reached %s\n", __func__);
502 286
503 switch (uptodate) { 287 switch (uptodate) {
504 case 0: error = IDEFLOPPY_ERROR_GENERAL; break; 288 case 0: error = IDEFLOPPY_ERROR_GENERAL; break;
505 case 1: error = 0; break; 289 case 1: error = 0; break;
506 default: error = uptodate; 290 default: error = uptodate;
507 } 291 }
508 if (error) 292 if (error)
509 floppy->failed_pc = NULL; 293 floppy->failed_pc = NULL;
@@ -521,39 +305,8 @@ static int idefloppy_do_end_request(ide_drive_t *drive, int uptodate, int nsecs)
521 return 0; 305 return 0;
522} 306}
523 307
524static void idefloppy_input_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, unsigned int bcount) 308static void ide_floppy_io_buffers(ide_drive_t *drive, idefloppy_pc_t *pc,
525{ 309 unsigned int bcount, int direction)
526 struct request *rq = pc->rq;
527 struct bio_vec *bvec;
528 struct req_iterator iter;
529 unsigned long flags;
530 char *data;
531 int count, done = 0;
532
533 rq_for_each_segment(bvec, rq, iter) {
534 if (!bcount)
535 break;
536
537 count = min(bvec->bv_len, bcount);
538
539 data = bvec_kmap_irq(bvec, &flags);
540 drive->hwif->atapi_input_bytes(drive, data, count);
541 bvec_kunmap_irq(data, &flags);
542
543 bcount -= count;
544 pc->b_count += count;
545 done += count;
546 }
547
548 idefloppy_do_end_request(drive, 1, done >> 9);
549
550 if (bcount) {
551 printk(KERN_ERR "%s: leftover data in idefloppy_input_buffers, bcount == %d\n", drive->name, bcount);
552 idefloppy_discard_data(drive, bcount);
553 }
554}
555
556static void idefloppy_output_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, unsigned int bcount)
557{ 310{
558 struct request *rq = pc->rq; 311 struct request *rq = pc->rq;
559 struct req_iterator iter; 312 struct req_iterator iter;
@@ -569,7 +322,10 @@ static void idefloppy_output_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, un
569 count = min(bvec->bv_len, bcount); 322 count = min(bvec->bv_len, bcount);
570 323
571 data = bvec_kmap_irq(bvec, &flags); 324 data = bvec_kmap_irq(bvec, &flags);
572 drive->hwif->atapi_output_bytes(drive, data, count); 325 if (direction)
326 drive->hwif->atapi_output_bytes(drive, data, count);
327 else
328 drive->hwif->atapi_input_bytes(drive, data, count);
573 bvec_kunmap_irq(data, &flags); 329 bvec_kunmap_irq(data, &flags);
574 330
575 bcount -= count; 331 bcount -= count;
@@ -579,15 +335,18 @@ static void idefloppy_output_buffers (ide_drive_t *drive, idefloppy_pc_t *pc, un
579 335
580 idefloppy_do_end_request(drive, 1, done >> 9); 336 idefloppy_do_end_request(drive, 1, done >> 9);
581 337
582#if IDEFLOPPY_DEBUG_BUGS
583 if (bcount) { 338 if (bcount) {
584 printk(KERN_ERR "%s: leftover data in idefloppy_output_buffers, bcount == %d\n", drive->name, bcount); 339 printk(KERN_ERR "%s: leftover data in %s, bcount == %d\n",
585 idefloppy_write_zeros(drive, bcount); 340 drive->name, __func__, bcount);
341 if (direction)
342 idefloppy_write_zeros(drive, bcount);
343 else
344 idefloppy_discard_data(drive, bcount);
345
586 } 346 }
587#endif
588} 347}
589 348
590static void idefloppy_update_buffers (ide_drive_t *drive, idefloppy_pc_t *pc) 349static void idefloppy_update_buffers(ide_drive_t *drive, idefloppy_pc_t *pc)
591{ 350{
592 struct request *rq = pc->rq; 351 struct request *rq = pc->rq;
593 struct bio *bio = rq->bio; 352 struct bio *bio = rq->bio;
@@ -597,11 +356,12 @@ static void idefloppy_update_buffers (ide_drive_t *drive, idefloppy_pc_t *pc)
597} 356}
598 357
599/* 358/*
600 * idefloppy_queue_pc_head generates a new packet command request in front 359 * Generate a new packet command request in front of the request queue, before
601 * of the request queue, before the current request, so that it will be 360 * the current request so that it will be processed immediately, on the next
602 * processed immediately, on the next pass through the driver. 361 * pass through the driver.
603 */ 362 */
604static void idefloppy_queue_pc_head (ide_drive_t *drive,idefloppy_pc_t *pc,struct request *rq) 363static void idefloppy_queue_pc_head(ide_drive_t *drive, idefloppy_pc_t *pc,
364 struct request *rq)
605{ 365{
606 struct ide_floppy_obj *floppy = drive->driver_data; 366 struct ide_floppy_obj *floppy = drive->driver_data;
607 367
@@ -612,16 +372,16 @@ static void idefloppy_queue_pc_head (ide_drive_t *drive,idefloppy_pc_t *pc,struc
612 (void) ide_do_drive_cmd(drive, rq, ide_preempt); 372 (void) ide_do_drive_cmd(drive, rq, ide_preempt);
613} 373}
614 374
615static idefloppy_pc_t *idefloppy_next_pc_storage (ide_drive_t *drive) 375static idefloppy_pc_t *idefloppy_next_pc_storage(ide_drive_t *drive)
616{ 376{
617 idefloppy_floppy_t *floppy = drive->driver_data; 377 idefloppy_floppy_t *floppy = drive->driver_data;
618 378
619 if (floppy->pc_stack_index == IDEFLOPPY_PC_STACK) 379 if (floppy->pc_stack_index == IDEFLOPPY_PC_STACK)
620 floppy->pc_stack_index=0; 380 floppy->pc_stack_index = 0;
621 return (&floppy->pc_stack[floppy->pc_stack_index++]); 381 return (&floppy->pc_stack[floppy->pc_stack_index++]);
622} 382}
623 383
624static struct request *idefloppy_next_rq_storage (ide_drive_t *drive) 384static struct request *idefloppy_next_rq_storage(ide_drive_t *drive)
625{ 385{
626 idefloppy_floppy_t *floppy = drive->driver_data; 386 idefloppy_floppy_t *floppy = drive->driver_data;
627 387
@@ -630,60 +390,53 @@ static struct request *idefloppy_next_rq_storage (ide_drive_t *drive)
630 return (&floppy->rq_stack[floppy->rq_stack_index++]); 390 return (&floppy->rq_stack[floppy->rq_stack_index++]);
631} 391}
632 392
633/* 393static void idefloppy_request_sense_callback(ide_drive_t *drive)
634 * idefloppy_analyze_error is called on each failed packet command retry
635 * to analyze the request sense.
636 */
637static void idefloppy_analyze_error (ide_drive_t *drive,idefloppy_request_sense_result_t *result)
638{ 394{
639 idefloppy_floppy_t *floppy = drive->driver_data; 395 idefloppy_floppy_t *floppy = drive->driver_data;
396 u8 *buf = floppy->pc->buffer;
640 397
641 floppy->sense_key = result->sense_key; 398 debug_log("Reached %s\n", __func__);
642 floppy->asc = result->asc;
643 floppy->ascq = result->ascq;
644 floppy->progress_indication = result->sksv[0] & 0x80 ?
645 (u16)get_unaligned((u16 *)(result->sksv+1)):0x10000;
646 if (floppy->failed_pc)
647 debug_log(KERN_INFO "ide-floppy: pc = %x, sense key = %x, "
648 "asc = %x, ascq = %x\n", floppy->failed_pc->c[0],
649 result->sense_key, result->asc, result->ascq);
650 else
651 debug_log(KERN_INFO "ide-floppy: sense key = %x, asc = %x, "
652 "ascq = %x\n", result->sense_key,
653 result->asc, result->ascq);
654}
655
656static void idefloppy_request_sense_callback (ide_drive_t *drive)
657{
658 idefloppy_floppy_t *floppy = drive->driver_data;
659 399
660 debug_log(KERN_INFO "ide-floppy: Reached %s\n", __FUNCTION__);
661
662 if (!floppy->pc->error) { 400 if (!floppy->pc->error) {
663 idefloppy_analyze_error(drive,(idefloppy_request_sense_result_t *) floppy->pc->buffer); 401 floppy->sense_key = buf[2] & 0x0F;
402 floppy->asc = buf[12];
403 floppy->ascq = buf[13];
404 floppy->progress_indication = buf[15] & 0x80 ?
405 (u16)get_unaligned((u16 *)&buf[16]) : 0x10000;
406
407 if (floppy->failed_pc)
408 debug_log("pc = %x, sense key = %x, asc = %x,"
409 " ascq = %x\n",
410 floppy->failed_pc->c[0],
411 floppy->sense_key,
412 floppy->asc,
413 floppy->ascq);
414 else
415 debug_log("sense key = %x, asc = %x, ascq = %x\n",
416 floppy->sense_key,
417 floppy->asc,
418 floppy->ascq);
419
420
664 idefloppy_do_end_request(drive, 1, 0); 421 idefloppy_do_end_request(drive, 1, 0);
665 } else { 422 } else {
666 printk(KERN_ERR "Error in REQUEST SENSE itself - Aborting request!\n"); 423 printk(KERN_ERR "Error in REQUEST SENSE itself - Aborting"
424 " request!\n");
667 idefloppy_do_end_request(drive, 0, 0); 425 idefloppy_do_end_request(drive, 0, 0);
668 } 426 }
669} 427}
670 428
671/* 429/* General packet command callback function. */
672 * General packet command callback function. 430static void idefloppy_pc_callback(ide_drive_t *drive)
673 */
674static void idefloppy_pc_callback (ide_drive_t *drive)
675{ 431{
676 idefloppy_floppy_t *floppy = drive->driver_data; 432 idefloppy_floppy_t *floppy = drive->driver_data;
677 433
678 debug_log(KERN_INFO "ide-floppy: Reached %s\n", __FUNCTION__); 434 debug_log("Reached %s\n", __func__);
679 435
680 idefloppy_do_end_request(drive, floppy->pc->error ? 0 : 1, 0); 436 idefloppy_do_end_request(drive, floppy->pc->error ? 0 : 1, 0);
681} 437}
682 438
683/* 439static void idefloppy_init_pc(idefloppy_pc_t *pc)
684 * idefloppy_init_pc initializes a packet command.
685 */
686static void idefloppy_init_pc (idefloppy_pc_t *pc)
687{ 440{
688 memset(pc->c, 0, 12); 441 memset(pc->c, 0, 12);
689 pc->retries = 0; 442 pc->retries = 0;
@@ -694,21 +447,20 @@ static void idefloppy_init_pc (idefloppy_pc_t *pc)
694 pc->callback = &idefloppy_pc_callback; 447 pc->callback = &idefloppy_pc_callback;
695} 448}
696 449
697static void idefloppy_create_request_sense_cmd (idefloppy_pc_t *pc) 450static void idefloppy_create_request_sense_cmd(idefloppy_pc_t *pc)
698{ 451{
699 idefloppy_init_pc(pc); 452 idefloppy_init_pc(pc);
700 pc->c[0] = IDEFLOPPY_REQUEST_SENSE_CMD; 453 pc->c[0] = GPCMD_REQUEST_SENSE;
701 pc->c[4] = 255; 454 pc->c[4] = 255;
702 pc->request_transfer = 18; 455 pc->request_transfer = 18;
703 pc->callback = &idefloppy_request_sense_callback; 456 pc->callback = &idefloppy_request_sense_callback;
704} 457}
705 458
706/* 459/*
707 * idefloppy_retry_pc is called when an error was detected during the 460 * Called when an error was detected during the last packet command. We queue a
708 * last packet command. We queue a request sense packet command in 461 * request sense packet command in the head of the request list.
709 * the head of the request list.
710 */ 462 */
711static void idefloppy_retry_pc (ide_drive_t *drive) 463static void idefloppy_retry_pc(ide_drive_t *drive)
712{ 464{
713 idefloppy_pc_t *pc; 465 idefloppy_pc_t *pc;
714 struct request *rq; 466 struct request *rq;
@@ -720,49 +472,50 @@ static void idefloppy_retry_pc (ide_drive_t *drive)
720 idefloppy_queue_pc_head(drive, pc, rq); 472 idefloppy_queue_pc_head(drive, pc, rq);
721} 473}
722 474
723/* 475/* The usual interrupt handler called during a packet command. */
724 * idefloppy_pc_intr is the usual interrupt handler which will be called
725 * during a packet command.
726 */
727static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive) 476static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
728{ 477{
729 idefloppy_floppy_t *floppy = drive->driver_data; 478 idefloppy_floppy_t *floppy = drive->driver_data;
730 ide_hwif_t *hwif = drive->hwif; 479 ide_hwif_t *hwif = drive->hwif;
731 idefloppy_pc_t *pc = floppy->pc; 480 idefloppy_pc_t *pc = floppy->pc;
732 struct request *rq = pc->rq; 481 struct request *rq = pc->rq;
482 xfer_func_t *xferfunc;
733 unsigned int temp; 483 unsigned int temp;
484 int dma_error = 0;
734 u16 bcount; 485 u16 bcount;
735 u8 stat, ireason; 486 u8 stat, ireason;
736 487
737 debug_log(KERN_INFO "ide-floppy: Reached %s interrupt handler\n", 488 debug_log("Reached %s interrupt handler\n", __func__);
738 __FUNCTION__);
739 489
740 if (test_bit(PC_DMA_IN_PROGRESS, &pc->flags)) { 490 if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
741 if (HWIF(drive)->ide_dma_end(drive)) { 491 dma_error = hwif->ide_dma_end(drive);
742 set_bit(PC_DMA_ERROR, &pc->flags); 492 if (dma_error) {
493 printk(KERN_ERR "%s: DMA %s error\n", drive->name,
494 rq_data_dir(rq) ? "write" : "read");
495 pc->flags |= PC_FLAG_DMA_ERROR;
743 } else { 496 } else {
744 pc->actually_transferred = pc->request_transfer; 497 pc->actually_transferred = pc->request_transfer;
745 idefloppy_update_buffers(drive, pc); 498 idefloppy_update_buffers(drive, pc);
746 } 499 }
747 debug_log(KERN_INFO "ide-floppy: DMA finished\n"); 500 debug_log("DMA finished\n");
748 } 501 }
749 502
750 /* Clear the interrupt */ 503 /* Clear the interrupt */
751 stat = drive->hwif->INB(IDE_STATUS_REG); 504 stat = drive->hwif->INB(IDE_STATUS_REG);
752 505
753 if ((stat & DRQ_STAT) == 0) { /* No more interrupts */ 506 /* No more interrupts */
754 debug_log(KERN_INFO "Packet command completed, %d bytes " 507 if ((stat & DRQ_STAT) == 0) {
755 "transferred\n", pc->actually_transferred); 508 debug_log("Packet command completed, %d bytes transferred\n",
756 clear_bit(PC_DMA_IN_PROGRESS, &pc->flags); 509 pc->actually_transferred);
510 pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS;
757 511
758 local_irq_enable_in_hardirq(); 512 local_irq_enable_in_hardirq();
759 513
760 if ((stat & ERR_STAT) || test_bit(PC_DMA_ERROR, &pc->flags)) { 514 if ((stat & ERR_STAT) || (pc->flags & PC_FLAG_DMA_ERROR)) {
761 /* Error detected */ 515 /* Error detected */
762 debug_log(KERN_INFO "ide-floppy: %s: I/O error\n", 516 debug_log("%s: I/O error\n", drive->name);
763 drive->name);
764 rq->errors++; 517 rq->errors++;
765 if (pc->c[0] == IDEFLOPPY_REQUEST_SENSE_CMD) { 518 if (pc->c[0] == GPCMD_REQUEST_SENSE) {
766 printk(KERN_ERR "ide-floppy: I/O error in " 519 printk(KERN_ERR "ide-floppy: I/O error in "
767 "request sense command\n"); 520 "request sense command\n");
768 return ide_do_reset(drive); 521 return ide_do_reset(drive);
@@ -780,7 +533,8 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
780 return ide_stopped; 533 return ide_stopped;
781 } 534 }
782 535
783 if (test_and_clear_bit(PC_DMA_IN_PROGRESS, &pc->flags)) { 536 if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
537 pc->flags &= ~PC_FLAG_DMA_IN_PROGRESS;
784 printk(KERN_ERR "ide-floppy: The floppy wants to issue " 538 printk(KERN_ERR "ide-floppy: The floppy wants to issue "
785 "more interrupts in DMA mode\n"); 539 "more interrupts in DMA mode\n");
786 ide_dma_off(drive); 540 ide_dma_off(drive);
@@ -794,10 +548,10 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
794 ireason = hwif->INB(IDE_IREASON_REG); 548 ireason = hwif->INB(IDE_IREASON_REG);
795 549
796 if (ireason & CD) { 550 if (ireason & CD) {
797 printk(KERN_ERR "ide-floppy: CoD != 0 in idefloppy_pc_intr\n"); 551 printk(KERN_ERR "ide-floppy: CoD != 0 in %s\n", __func__);
798 return ide_do_reset(drive); 552 return ide_do_reset(drive);
799 } 553 }
800 if (((ireason & IO) == IO) == test_bit(PC_WRITING, &pc->flags)) { 554 if (((ireason & IO) == IO) == !!(pc->flags & PC_FLAG_WRITING)) {
801 /* Hopefully, we will never get here */ 555 /* Hopefully, we will never get here */
802 printk(KERN_ERR "ide-floppy: We wanted to %s, ", 556 printk(KERN_ERR "ide-floppy: We wanted to %s, ",
803 (ireason & IO) ? "Write" : "Read"); 557 (ireason & IO) ? "Write" : "Read");
@@ -805,7 +559,7 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
805 (ireason & IO) ? "Read" : "Write"); 559 (ireason & IO) ? "Read" : "Write");
806 return ide_do_reset(drive); 560 return ide_do_reset(drive);
807 } 561 }
808 if (!test_bit(PC_WRITING, &pc->flags)) { 562 if (!(pc->flags & PC_FLAG_WRITING)) {
809 /* Reading - Check that we have enough space */ 563 /* Reading - Check that we have enough space */
810 temp = pc->actually_transferred + bcount; 564 temp = pc->actually_transferred + bcount;
811 if (temp > pc->request_transfer) { 565 if (temp > pc->request_transfer) {
@@ -814,39 +568,34 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
814 "to send us more data than expected " 568 "to send us more data than expected "
815 "- discarding data\n"); 569 "- discarding data\n");
816 idefloppy_discard_data(drive, bcount); 570 idefloppy_discard_data(drive, bcount);
817 BUG_ON(HWGROUP(drive)->handler != NULL); 571
818 ide_set_handler(drive, 572 ide_set_handler(drive,
819 &idefloppy_pc_intr, 573 &idefloppy_pc_intr,
820 IDEFLOPPY_WAIT_CMD, 574 IDEFLOPPY_WAIT_CMD,
821 NULL); 575 NULL);
822 return ide_started; 576 return ide_started;
823 } 577 }
824 debug_log(KERN_NOTICE "ide-floppy: The floppy wants to " 578 debug_log("The floppy wants to send us more data than"
825 "send us more data than expected - " 579 " expected - allowing transfer\n");
826 "allowing transfer\n");
827 } 580 }
828 } 581 }
829 if (test_bit(PC_WRITING, &pc->flags)) { 582 if (pc->flags & PC_FLAG_WRITING)
830 if (pc->buffer != NULL) 583 xferfunc = hwif->atapi_output_bytes;
831 /* Write the current buffer */ 584 else
832 hwif->atapi_output_bytes(drive, pc->current_position, 585 xferfunc = hwif->atapi_input_bytes;
833 bcount); 586
834 else 587 if (pc->buffer)
835 idefloppy_output_buffers(drive, pc, bcount); 588 xferfunc(drive, pc->current_position, bcount);
836 } else { 589 else
837 if (pc->buffer != NULL) 590 ide_floppy_io_buffers(drive, pc, bcount,
838 /* Read the current buffer */ 591 !!(pc->flags & PC_FLAG_WRITING));
839 hwif->atapi_input_bytes(drive, pc->current_position, 592
840 bcount);
841 else
842 idefloppy_input_buffers(drive, pc, bcount);
843 }
844 /* Update the current position */ 593 /* Update the current position */
845 pc->actually_transferred += bcount; 594 pc->actually_transferred += bcount;
846 pc->current_position += bcount; 595 pc->current_position += bcount;
847 596
848 BUG_ON(HWGROUP(drive)->handler != NULL); 597 /* And set the interrupt handler again */
849 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); /* And set the interrupt handler again */ 598 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL);
850 return ide_started; 599 return ide_started;
851} 600}
852 601
@@ -855,7 +604,7 @@ static ide_startstop_t idefloppy_pc_intr (ide_drive_t *drive)
855 * It fails at high speeds on the Iomega ZIP drive, so there's a slower version 604 * It fails at high speeds on the Iomega ZIP drive, so there's a slower version
856 * for that drive below. The algorithm is chosen based on drive type 605 * for that drive below. The algorithm is chosen based on drive type
857 */ 606 */
858static ide_startstop_t idefloppy_transfer_pc (ide_drive_t *drive) 607static ide_startstop_t idefloppy_transfer_pc(ide_drive_t *drive)
859{ 608{
860 ide_startstop_t startstop; 609 ide_startstop_t startstop;
861 idefloppy_floppy_t *floppy = drive->driver_data; 610 idefloppy_floppy_t *floppy = drive->driver_data;
@@ -872,7 +621,7 @@ static ide_startstop_t idefloppy_transfer_pc (ide_drive_t *drive)
872 "issuing a packet command\n"); 621 "issuing a packet command\n");
873 return ide_do_reset(drive); 622 return ide_do_reset(drive);
874 } 623 }
875 BUG_ON(HWGROUP(drive)->handler != NULL); 624
876 /* Set the interrupt routine */ 625 /* Set the interrupt routine */
877 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); 626 ide_set_handler(drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL);
878 /* Send the actual packet */ 627 /* Send the actual packet */
@@ -882,18 +631,16 @@ static ide_startstop_t idefloppy_transfer_pc (ide_drive_t *drive)
882 631
883 632
884/* 633/*
885 * What we have here is a classic case of a top half / bottom half 634 * What we have here is a classic case of a top half / bottom half interrupt
886 * interrupt service routine. In interrupt mode, the device sends 635 * service routine. In interrupt mode, the device sends an interrupt to signal
887 * an interrupt to signal it's ready to receive a packet. However, 636 * that it is ready to receive a packet. However, we need to delay about 2-3
888 * we need to delay about 2-3 ticks before issuing the packet or we 637 * ticks before issuing the packet or we gets in trouble.
889 * gets in trouble.
890 * 638 *
891 * So, follow carefully. transfer_pc1 is called as an interrupt (or 639 * So, follow carefully. transfer_pc1 is called as an interrupt (or directly).
892 * directly). In either case, when the device says it's ready for a 640 * In either case, when the device says it's ready for a packet, we schedule
893 * packet, we schedule the packet transfer to occur about 2-3 ticks 641 * the packet transfer to occur about 2-3 ticks later in transfer_pc2.
894 * later in transfer_pc2.
895 */ 642 */
896static int idefloppy_transfer_pc2 (ide_drive_t *drive) 643static int idefloppy_transfer_pc2(ide_drive_t *drive)
897{ 644{
898 idefloppy_floppy_t *floppy = drive->driver_data; 645 idefloppy_floppy_t *floppy = drive->driver_data;
899 646
@@ -903,7 +650,7 @@ static int idefloppy_transfer_pc2 (ide_drive_t *drive)
903 return IDEFLOPPY_WAIT_CMD; 650 return IDEFLOPPY_WAIT_CMD;
904} 651}
905 652
906static ide_startstop_t idefloppy_transfer_pc1 (ide_drive_t *drive) 653static ide_startstop_t idefloppy_transfer_pc1(ide_drive_t *drive)
907{ 654{
908 idefloppy_floppy_t *floppy = drive->driver_data; 655 idefloppy_floppy_t *floppy = drive->driver_data;
909 ide_startstop_t startstop; 656 ide_startstop_t startstop;
@@ -920,7 +667,7 @@ static ide_startstop_t idefloppy_transfer_pc1 (ide_drive_t *drive)
920 "while issuing a packet command\n"); 667 "while issuing a packet command\n");
921 return ide_do_reset(drive); 668 return ide_do_reset(drive);
922 } 669 }
923 /* 670 /*
924 * The following delay solves a problem with ATAPI Zip 100 drives 671 * The following delay solves a problem with ATAPI Zip 100 drives
925 * where the Busy flag was apparently being deasserted before the 672 * where the Busy flag was apparently being deasserted before the
926 * unit was ready to receive data. This was happening on a 673 * unit was ready to receive data. This was happening on a
@@ -928,32 +675,30 @@ static ide_startstop_t idefloppy_transfer_pc1 (ide_drive_t *drive)
928 * 40 and 50msec work well. idefloppy_pc_intr will not be actually 675 * 40 and 50msec work well. idefloppy_pc_intr will not be actually
929 * used until after the packet is moved in about 50 msec. 676 * used until after the packet is moved in about 50 msec.
930 */ 677 */
931 BUG_ON(HWGROUP(drive)->handler != NULL); 678
932 ide_set_handler(drive, 679 ide_set_handler(drive, &idefloppy_pc_intr, floppy->ticks,
933 &idefloppy_pc_intr, /* service routine for packet command */ 680 &idefloppy_transfer_pc2);
934 floppy->ticks, /* wait this long before "failing" */
935 &idefloppy_transfer_pc2); /* fail == transfer_pc2 */
936 return ide_started; 681 return ide_started;
937} 682}
938 683
939/** 684static void ide_floppy_report_error(idefloppy_floppy_t *floppy,
940 * idefloppy_should_report_error() 685 idefloppy_pc_t *pc)
941 *
942 * Supresses error messages resulting from Medium not present
943 */
944static inline int idefloppy_should_report_error(idefloppy_floppy_t *floppy)
945{ 686{
687 /* supress error messages resulting from Medium not present */
946 if (floppy->sense_key == 0x02 && 688 if (floppy->sense_key == 0x02 &&
947 floppy->asc == 0x3a && 689 floppy->asc == 0x3a &&
948 floppy->ascq == 0x00) 690 floppy->ascq == 0x00)
949 return 0; 691 return;
950 return 1; 692
693 printk(KERN_ERR "ide-floppy: %s: I/O error, pc = %2x, key = %2x, "
694 "asc = %2x, ascq = %2x\n",
695 floppy->drive->name, pc->c[0], floppy->sense_key,
696 floppy->asc, floppy->ascq);
697
951} 698}
952 699
953/* 700static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
954 * Issue a packet command 701 idefloppy_pc_t *pc)
955 */
956static ide_startstop_t idefloppy_issue_pc (ide_drive_t *drive, idefloppy_pc_t *pc)
957{ 702{
958 idefloppy_floppy_t *floppy = drive->driver_data; 703 idefloppy_floppy_t *floppy = drive->driver_data;
959 ide_hwif_t *hwif = drive->hwif; 704 ide_hwif_t *hwif = drive->hwif;
@@ -962,36 +707,23 @@ static ide_startstop_t idefloppy_issue_pc (ide_drive_t *drive, idefloppy_pc_t *p
962 u8 dma; 707 u8 dma;
963 708
964 if (floppy->failed_pc == NULL && 709 if (floppy->failed_pc == NULL &&
965 pc->c[0] != IDEFLOPPY_REQUEST_SENSE_CMD) 710 pc->c[0] != GPCMD_REQUEST_SENSE)
966 floppy->failed_pc = pc; 711 floppy->failed_pc = pc;
967 /* Set the current packet command */ 712 /* Set the current packet command */
968 floppy->pc = pc; 713 floppy->pc = pc;
969 714
970 if (pc->retries > IDEFLOPPY_MAX_PC_RETRIES || 715 if (pc->retries > IDEFLOPPY_MAX_PC_RETRIES) {
971 test_bit(PC_ABORT, &pc->flags)) { 716 if (!(pc->flags & PC_FLAG_SUPPRESS_ERROR))
972 /* 717 ide_floppy_report_error(floppy, pc);
973 * We will "abort" retrying a packet command in case 718 /* Giving up */
974 * a legitimate error code was received. 719 pc->error = IDEFLOPPY_ERROR_GENERAL;
975 */ 720
976 if (!test_bit(PC_ABORT, &pc->flags)) {
977 if (!test_bit(PC_SUPPRESS_ERROR, &pc->flags)) {
978 if (idefloppy_should_report_error(floppy))
979 printk(KERN_ERR "ide-floppy: %s: I/O error, "
980 "pc = %2x, key = %2x, "
981 "asc = %2x, ascq = %2x\n",
982 drive->name, pc->c[0],
983 floppy->sense_key,
984 floppy->asc, floppy->ascq);
985 }
986 /* Giving up */
987 pc->error = IDEFLOPPY_ERROR_GENERAL;
988 }
989 floppy->failed_pc = NULL; 721 floppy->failed_pc = NULL;
990 pc->callback(drive); 722 pc->callback(drive);
991 return ide_stopped; 723 return ide_stopped;
992 } 724 }
993 725
994 debug_log(KERN_INFO "Retry number - %d\n",pc->retries); 726 debug_log("Retry number - %d\n", pc->retries);
995 727
996 pc->retries++; 728 pc->retries++;
997 /* We haven't transferred any data yet */ 729 /* We haven't transferred any data yet */
@@ -999,24 +731,26 @@ static ide_startstop_t idefloppy_issue_pc (ide_drive_t *drive, idefloppy_pc_t *p
999 pc->current_position = pc->buffer; 731 pc->current_position = pc->buffer;
1000 bcount = min(pc->request_transfer, 63 * 1024); 732 bcount = min(pc->request_transfer, 63 * 1024);
1001 733
1002 if (test_and_clear_bit(PC_DMA_ERROR, &pc->flags)) 734 if (pc->flags & PC_FLAG_DMA_ERROR) {
735 pc->flags &= ~PC_FLAG_DMA_ERROR;
1003 ide_dma_off(drive); 736 ide_dma_off(drive);
1004 737 }
1005 dma = 0; 738 dma = 0;
1006 739
1007 if (test_bit(PC_DMA_RECOMMENDED, &pc->flags) && drive->using_dma) 740 if ((pc->flags & PC_FLAG_DMA_RECOMMENDED) && drive->using_dma)
1008 dma = !hwif->dma_setup(drive); 741 dma = !hwif->dma_setup(drive);
1009 742
1010 ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK | 743 ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK |
1011 IDE_TFLAG_OUT_DEVICE, bcount, dma); 744 IDE_TFLAG_OUT_DEVICE, bcount, dma);
1012 745
1013 if (dma) { /* Begin DMA, if necessary */ 746 if (dma) {
1014 set_bit(PC_DMA_IN_PROGRESS, &pc->flags); 747 /* Begin DMA, if necessary */
748 pc->flags |= PC_FLAG_DMA_IN_PROGRESS;
1015 hwif->dma_start(drive); 749 hwif->dma_start(drive);
1016 } 750 }
1017 751
1018 /* Can we transfer the packet when we get the interrupt or wait? */ 752 /* Can we transfer the packet when we get the interrupt or wait? */
1019 if (test_bit(IDEFLOPPY_ZIP_DRIVE, &floppy->flags)) { 753 if (floppy->flags & IDEFLOPPY_FLAG_ZIP_DRIVE) {
1020 /* wait */ 754 /* wait */
1021 pkt_xfer_routine = &idefloppy_transfer_pc1; 755 pkt_xfer_routine = &idefloppy_transfer_pc1;
1022 } else { 756 } else {
@@ -1024,7 +758,7 @@ static ide_startstop_t idefloppy_issue_pc (ide_drive_t *drive, idefloppy_pc_t *p
1024 pkt_xfer_routine = &idefloppy_transfer_pc; 758 pkt_xfer_routine = &idefloppy_transfer_pc;
1025 } 759 }
1026 760
1027 if (test_bit (IDEFLOPPY_DRQ_INTERRUPT, &floppy->flags)) { 761 if (floppy->flags & IDEFLOPPY_FLAG_DRQ_INTERRUPT) {
1028 /* Issue the packet command */ 762 /* Issue the packet command */
1029 ide_execute_command(drive, WIN_PACKETCMD, 763 ide_execute_command(drive, WIN_PACKETCMD,
1030 pkt_xfer_routine, 764 pkt_xfer_routine,
@@ -1038,38 +772,37 @@ static ide_startstop_t idefloppy_issue_pc (ide_drive_t *drive, idefloppy_pc_t *p
1038 } 772 }
1039} 773}
1040 774
1041static void idefloppy_rw_callback (ide_drive_t *drive) 775static void idefloppy_rw_callback(ide_drive_t *drive)
1042{ 776{
1043 debug_log(KERN_INFO "ide-floppy: Reached idefloppy_rw_callback\n"); 777 debug_log("Reached %s\n", __func__);
1044 778
1045 idefloppy_do_end_request(drive, 1, 0); 779 idefloppy_do_end_request(drive, 1, 0);
1046 return; 780 return;
1047} 781}
1048 782
1049static void idefloppy_create_prevent_cmd (idefloppy_pc_t *pc, int prevent) 783static void idefloppy_create_prevent_cmd(idefloppy_pc_t *pc, int prevent)
1050{ 784{
1051 debug_log(KERN_INFO "ide-floppy: creating prevent removal command, " 785 debug_log("creating prevent removal command, prevent = %d\n", prevent);
1052 "prevent = %d\n", prevent);
1053 786
1054 idefloppy_init_pc(pc); 787 idefloppy_init_pc(pc);
1055 pc->c[0] = IDEFLOPPY_PREVENT_REMOVAL_CMD; 788 pc->c[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL;
1056 pc->c[4] = prevent; 789 pc->c[4] = prevent;
1057} 790}
1058 791
1059static void idefloppy_create_read_capacity_cmd (idefloppy_pc_t *pc) 792static void idefloppy_create_read_capacity_cmd(idefloppy_pc_t *pc)
1060{ 793{
1061 idefloppy_init_pc(pc); 794 idefloppy_init_pc(pc);
1062 pc->c[0] = IDEFLOPPY_READ_CAPACITY_CMD; 795 pc->c[0] = GPCMD_READ_FORMAT_CAPACITIES;
1063 pc->c[7] = 255; 796 pc->c[7] = 255;
1064 pc->c[8] = 255; 797 pc->c[8] = 255;
1065 pc->request_transfer = 255; 798 pc->request_transfer = 255;
1066} 799}
1067 800
1068static void idefloppy_create_format_unit_cmd (idefloppy_pc_t *pc, int b, int l, 801static void idefloppy_create_format_unit_cmd(idefloppy_pc_t *pc, int b, int l,
1069 int flags) 802 int flags)
1070{ 803{
1071 idefloppy_init_pc(pc); 804 idefloppy_init_pc(pc);
1072 pc->c[0] = IDEFLOPPY_FORMAT_UNIT_CMD; 805 pc->c[0] = GPCMD_FORMAT_UNIT;
1073 pc->c[1] = 0x17; 806 pc->c[1] = 0x17;
1074 807
1075 memset(pc->buffer, 0, 12); 808 memset(pc->buffer, 0, 12);
@@ -1080,83 +813,79 @@ static void idefloppy_create_format_unit_cmd (idefloppy_pc_t *pc, int b, int l,
1080 pc->buffer[1] ^= 0x20; /* ... turn off DCRT bit */ 813 pc->buffer[1] ^= 0x20; /* ... turn off DCRT bit */
1081 pc->buffer[3] = 8; 814 pc->buffer[3] = 8;
1082 815
1083 put_unaligned(htonl(b), (unsigned int *)(&pc->buffer[4])); 816 put_unaligned(cpu_to_be32(b), (unsigned int *)(&pc->buffer[4]));
1084 put_unaligned(htonl(l), (unsigned int *)(&pc->buffer[8])); 817 put_unaligned(cpu_to_be32(l), (unsigned int *)(&pc->buffer[8]));
1085 pc->buffer_size=12; 818 pc->buffer_size = 12;
1086 set_bit(PC_WRITING, &pc->flags); 819 pc->flags |= PC_FLAG_WRITING;
1087} 820}
1088 821
1089/* 822/* A mode sense command is used to "sense" floppy parameters. */
1090 * A mode sense command is used to "sense" floppy parameters. 823static void idefloppy_create_mode_sense_cmd(idefloppy_pc_t *pc, u8 page_code,
1091 */ 824 u8 type)
1092static void idefloppy_create_mode_sense_cmd (idefloppy_pc_t *pc, u8 page_code, u8 type)
1093{ 825{
1094 u16 length = sizeof(idefloppy_mode_parameter_header_t); 826 u16 length = 8; /* sizeof(Mode Parameter Header) = 8 Bytes */
1095 827
1096 idefloppy_init_pc(pc); 828 idefloppy_init_pc(pc);
1097 pc->c[0] = IDEFLOPPY_MODE_SENSE_CMD; 829 pc->c[0] = GPCMD_MODE_SENSE_10;
1098 pc->c[1] = 0; 830 pc->c[1] = 0;
1099 pc->c[2] = page_code + (type << 6); 831 pc->c[2] = page_code + (type << 6);
1100 832
1101 switch (page_code) { 833 switch (page_code) {
1102 case IDEFLOPPY_CAPABILITIES_PAGE: 834 case IDEFLOPPY_CAPABILITIES_PAGE:
1103 length += 12; 835 length += 12;
1104 break; 836 break;
1105 case IDEFLOPPY_FLEXIBLE_DISK_PAGE: 837 case IDEFLOPPY_FLEXIBLE_DISK_PAGE:
1106 length += 32; 838 length += 32;
1107 break; 839 break;
1108 default: 840 default:
1109 printk(KERN_ERR "ide-floppy: unsupported page code " 841 printk(KERN_ERR "ide-floppy: unsupported page code "
1110 "in create_mode_sense_cmd\n"); 842 "in create_mode_sense_cmd\n");
1111 } 843 }
1112 put_unaligned(htons(length), (u16 *) &pc->c[7]); 844 put_unaligned(cpu_to_be16(length), (u16 *) &pc->c[7]);
1113 pc->request_transfer = length; 845 pc->request_transfer = length;
1114} 846}
1115 847
1116static void idefloppy_create_start_stop_cmd (idefloppy_pc_t *pc, int start) 848static void idefloppy_create_start_stop_cmd(idefloppy_pc_t *pc, int start)
1117{ 849{
1118 idefloppy_init_pc(pc); 850 idefloppy_init_pc(pc);
1119 pc->c[0] = IDEFLOPPY_START_STOP_CMD; 851 pc->c[0] = GPCMD_START_STOP_UNIT;
1120 pc->c[4] = start; 852 pc->c[4] = start;
1121} 853}
1122 854
1123static void idefloppy_create_test_unit_ready_cmd(idefloppy_pc_t *pc) 855static void idefloppy_create_test_unit_ready_cmd(idefloppy_pc_t *pc)
1124{ 856{
1125 idefloppy_init_pc(pc); 857 idefloppy_init_pc(pc);
1126 pc->c[0] = IDEFLOPPY_TEST_UNIT_READY_CMD; 858 pc->c[0] = GPCMD_TEST_UNIT_READY;
1127} 859}
1128 860
1129static void idefloppy_create_rw_cmd (idefloppy_floppy_t *floppy, idefloppy_pc_t *pc, struct request *rq, unsigned long sector) 861static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy,
862 idefloppy_pc_t *pc, struct request *rq,
863 unsigned long sector)
1130{ 864{
1131 int block = sector / floppy->bs_factor; 865 int block = sector / floppy->bs_factor;
1132 int blocks = rq->nr_sectors / floppy->bs_factor; 866 int blocks = rq->nr_sectors / floppy->bs_factor;
1133 int cmd = rq_data_dir(rq); 867 int cmd = rq_data_dir(rq);
1134 868
1135 debug_log("create_rw1%d_cmd: block == %d, blocks == %d\n", 869 debug_log("create_rw10_cmd: block == %d, blocks == %d\n",
1136 2 * test_bit (IDEFLOPPY_USE_READ12, &floppy->flags),
1137 block, blocks); 870 block, blocks);
1138 871
1139 idefloppy_init_pc(pc); 872 idefloppy_init_pc(pc);
1140 if (test_bit(IDEFLOPPY_USE_READ12, &floppy->flags)) { 873 pc->c[0] = cmd == READ ? GPCMD_READ_10 : GPCMD_WRITE_10;
1141 pc->c[0] = cmd == READ ? IDEFLOPPY_READ12_CMD : IDEFLOPPY_WRITE12_CMD; 874 put_unaligned(cpu_to_be16(blocks), (unsigned short *)&pc->c[7]);
1142 put_unaligned(htonl(blocks), (unsigned int *) &pc->c[6]); 875 put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[2]);
1143 } else { 876
1144 pc->c[0] = cmd == READ ? IDEFLOPPY_READ10_CMD : IDEFLOPPY_WRITE10_CMD;
1145 put_unaligned(htons(blocks), (unsigned short *) &pc->c[7]);
1146 }
1147 put_unaligned(htonl(block), (unsigned int *) &pc->c[2]);
1148 pc->callback = &idefloppy_rw_callback; 877 pc->callback = &idefloppy_rw_callback;
1149 pc->rq = rq; 878 pc->rq = rq;
1150 pc->b_count = cmd == READ ? 0 : rq->bio->bi_size; 879 pc->b_count = cmd == READ ? 0 : rq->bio->bi_size;
1151 if (rq->cmd_flags & REQ_RW) 880 if (rq->cmd_flags & REQ_RW)
1152 set_bit(PC_WRITING, &pc->flags); 881 pc->flags |= PC_FLAG_WRITING;
1153 pc->buffer = NULL; 882 pc->buffer = NULL;
1154 pc->request_transfer = pc->buffer_size = blocks * floppy->block_size; 883 pc->request_transfer = pc->buffer_size = blocks * floppy->block_size;
1155 set_bit(PC_DMA_RECOMMENDED, &pc->flags); 884 pc->flags |= PC_FLAG_DMA_RECOMMENDED;
1156} 885}
1157 886
1158static void 887static void idefloppy_blockpc_cmd(idefloppy_floppy_t *floppy,
1159idefloppy_blockpc_cmd(idefloppy_floppy_t *floppy, idefloppy_pc_t *pc, struct request *rq) 888 idefloppy_pc_t *pc, struct request *rq)
1160{ 889{
1161 idefloppy_init_pc(pc); 890 idefloppy_init_pc(pc);
1162 pc->callback = &idefloppy_rw_callback; 891 pc->callback = &idefloppy_rw_callback;
@@ -1164,11 +893,10 @@ idefloppy_blockpc_cmd(idefloppy_floppy_t *floppy, idefloppy_pc_t *pc, struct req
1164 pc->rq = rq; 893 pc->rq = rq;
1165 pc->b_count = rq->data_len; 894 pc->b_count = rq->data_len;
1166 if (rq->data_len && rq_data_dir(rq) == WRITE) 895 if (rq->data_len && rq_data_dir(rq) == WRITE)
1167 set_bit(PC_WRITING, &pc->flags); 896 pc->flags |= PC_FLAG_WRITING;
1168 pc->buffer = rq->data; 897 pc->buffer = rq->data;
1169 if (rq->bio) 898 if (rq->bio)
1170 set_bit(PC_DMA_RECOMMENDED, &pc->flags); 899 pc->flags |= PC_FLAG_DMA_RECOMMENDED;
1171
1172 /* 900 /*
1173 * possibly problematic, doesn't look like ide-floppy correctly 901 * possibly problematic, doesn't look like ide-floppy correctly
1174 * handled scattered requests if dma fails... 902 * handled scattered requests if dma fails...
@@ -1176,30 +904,23 @@ idefloppy_blockpc_cmd(idefloppy_floppy_t *floppy, idefloppy_pc_t *pc, struct req
1176 pc->request_transfer = pc->buffer_size = rq->data_len; 904 pc->request_transfer = pc->buffer_size = rq->data_len;
1177} 905}
1178 906
1179/* 907static ide_startstop_t idefloppy_do_request(ide_drive_t *drive,
1180 * idefloppy_do_request is our request handling function. 908 struct request *rq, sector_t block_s)
1181 */
1182static ide_startstop_t idefloppy_do_request (ide_drive_t *drive, struct request *rq, sector_t block_s)
1183{ 909{
1184 idefloppy_floppy_t *floppy = drive->driver_data; 910 idefloppy_floppy_t *floppy = drive->driver_data;
1185 idefloppy_pc_t *pc; 911 idefloppy_pc_t *pc;
1186 unsigned long block = (unsigned long)block_s; 912 unsigned long block = (unsigned long)block_s;
1187 913
1188 debug_log(KERN_INFO "dev: %s, flags: %lx, errors: %d\n", 914 debug_log("dev: %s, cmd_type: %x, errors: %d\n",
1189 rq->rq_disk ? rq->rq_disk->disk_name : "?", 915 rq->rq_disk ? rq->rq_disk->disk_name : "?",
1190 rq->flags, rq->errors); 916 rq->cmd_type, rq->errors);
1191 debug_log(KERN_INFO "sector: %ld, nr_sectors: %ld, " 917 debug_log("sector: %ld, nr_sectors: %ld, "
1192 "current_nr_sectors: %d\n", (long)rq->sector, 918 "current_nr_sectors: %d\n", (long)rq->sector,
1193 rq->nr_sectors, rq->current_nr_sectors); 919 rq->nr_sectors, rq->current_nr_sectors);
1194 920
1195 if (rq->errors >= ERROR_MAX) { 921 if (rq->errors >= ERROR_MAX) {
1196 if (floppy->failed_pc != NULL) { 922 if (floppy->failed_pc)
1197 if (idefloppy_should_report_error(floppy)) 923 ide_floppy_report_error(floppy, floppy->failed_pc);
1198 printk(KERN_ERR "ide-floppy: %s: I/O error, pc = %2x,"
1199 " key = %2x, asc = %2x, ascq = %2x\n",
1200 drive->name, floppy->failed_pc->c[0],
1201 floppy->sense_key, floppy->asc, floppy->ascq);
1202 }
1203 else 924 else
1204 printk(KERN_ERR "ide-floppy: %s: I/O error\n", 925 printk(KERN_ERR "ide-floppy: %s: I/O error\n",
1205 drive->name); 926 drive->name);
@@ -1209,8 +930,8 @@ static ide_startstop_t idefloppy_do_request (ide_drive_t *drive, struct request
1209 if (blk_fs_request(rq)) { 930 if (blk_fs_request(rq)) {
1210 if (((long)rq->sector % floppy->bs_factor) || 931 if (((long)rq->sector % floppy->bs_factor) ||
1211 (rq->nr_sectors % floppy->bs_factor)) { 932 (rq->nr_sectors % floppy->bs_factor)) {
1212 printk("%s: unsupported r/w request size\n", 933 printk(KERN_ERR "%s: unsupported r/w request size\n",
1213 drive->name); 934 drive->name);
1214 idefloppy_do_end_request(drive, 0, 0); 935 idefloppy_do_end_request(drive, 0, 0);
1215 return ide_stopped; 936 return ide_stopped;
1216 } 937 }
@@ -1233,15 +954,15 @@ static ide_startstop_t idefloppy_do_request (ide_drive_t *drive, struct request
1233} 954}
1234 955
1235/* 956/*
1236 * idefloppy_queue_pc_tail adds a special packet command request to the 957 * Add a special packet command request to the tail of the request queue,
1237 * tail of the request queue, and waits for it to be serviced. 958 * and wait for it to be serviced.
1238 */ 959 */
1239static int idefloppy_queue_pc_tail (ide_drive_t *drive,idefloppy_pc_t *pc) 960static int idefloppy_queue_pc_tail(ide_drive_t *drive, idefloppy_pc_t *pc)
1240{ 961{
1241 struct ide_floppy_obj *floppy = drive->driver_data; 962 struct ide_floppy_obj *floppy = drive->driver_data;
1242 struct request rq; 963 struct request rq;
1243 964
1244 ide_init_drive_cmd (&rq); 965 ide_init_drive_cmd(&rq);
1245 rq.buffer = (char *) pc; 966 rq.buffer = (char *) pc;
1246 rq.cmd_type = REQ_TYPE_SPECIAL; 967 rq.cmd_type = REQ_TYPE_SPECIAL;
1247 rq.rq_disk = floppy->disk; 968 rq.rq_disk = floppy->disk;
@@ -1250,88 +971,90 @@ static int idefloppy_queue_pc_tail (ide_drive_t *drive,idefloppy_pc_t *pc)
1250} 971}
1251 972
1252/* 973/*
1253 * Look at the flexible disk page parameters. We will ignore the CHS 974 * Look at the flexible disk page parameters. We ignore the CHS capacity
1254 * capacity parameters and use the LBA parameters instead. 975 * parameters and use the LBA parameters instead.
1255 */ 976 */
1256static int idefloppy_get_flexible_disk_page (ide_drive_t *drive) 977static int ide_floppy_get_flexible_disk_page(ide_drive_t *drive)
1257{ 978{
1258 idefloppy_floppy_t *floppy = drive->driver_data; 979 idefloppy_floppy_t *floppy = drive->driver_data;
1259 idefloppy_pc_t pc; 980 idefloppy_pc_t pc;
1260 idefloppy_mode_parameter_header_t *header; 981 u8 *page;
1261 idefloppy_flexible_disk_page_t *page;
1262 int capacity, lba_capacity; 982 int capacity, lba_capacity;
983 u16 transfer_rate, sector_size, cyls, rpm;
984 u8 heads, sectors;
985
986 idefloppy_create_mode_sense_cmd(&pc, IDEFLOPPY_FLEXIBLE_DISK_PAGE,
987 MODE_SENSE_CURRENT);
1263 988
1264 idefloppy_create_mode_sense_cmd(&pc, IDEFLOPPY_FLEXIBLE_DISK_PAGE, MODE_SENSE_CURRENT); 989 if (idefloppy_queue_pc_tail(drive, &pc)) {
1265 if (idefloppy_queue_pc_tail(drive,&pc)) { 990 printk(KERN_ERR "ide-floppy: Can't get flexible disk page"
1266 printk(KERN_ERR "ide-floppy: Can't get flexible disk " 991 " parameters\n");
1267 "page parameters\n");
1268 return 1; 992 return 1;
1269 } 993 }
1270 header = (idefloppy_mode_parameter_header_t *) pc.buffer; 994 floppy->wp = !!(pc.buffer[3] & 0x80);
1271 floppy->wp = header->wp;
1272 set_disk_ro(floppy->disk, floppy->wp); 995 set_disk_ro(floppy->disk, floppy->wp);
1273 page = (idefloppy_flexible_disk_page_t *) (header + 1); 996 page = &pc.buffer[8];
1274 997
1275 page->transfer_rate = ntohs(page->transfer_rate); 998 transfer_rate = be16_to_cpu(*(u16 *)&pc.buffer[8 + 2]);
1276 page->sector_size = ntohs(page->sector_size); 999 sector_size = be16_to_cpu(*(u16 *)&pc.buffer[8 + 6]);
1277 page->cyls = ntohs(page->cyls); 1000 cyls = be16_to_cpu(*(u16 *)&pc.buffer[8 + 8]);
1278 page->rpm = ntohs(page->rpm); 1001 rpm = be16_to_cpu(*(u16 *)&pc.buffer[8 + 28]);
1279 capacity = page->cyls * page->heads * page->sectors * page->sector_size; 1002 heads = pc.buffer[8 + 4];
1280 if (memcmp (page, &floppy->flexible_disk_page, sizeof (idefloppy_flexible_disk_page_t))) 1003 sectors = pc.buffer[8 + 5];
1004
1005 capacity = cyls * heads * sectors * sector_size;
1006
1007 if (memcmp(page, &floppy->flexible_disk_page, 32))
1281 printk(KERN_INFO "%s: %dkB, %d/%d/%d CHS, %d kBps, " 1008 printk(KERN_INFO "%s: %dkB, %d/%d/%d CHS, %d kBps, "
1282 "%d sector size, %d rpm\n", 1009 "%d sector size, %d rpm\n",
1283 drive->name, capacity / 1024, page->cyls, 1010 drive->name, capacity / 1024, cyls, heads,
1284 page->heads, page->sectors, 1011 sectors, transfer_rate / 8, sector_size, rpm);
1285 page->transfer_rate / 8, page->sector_size, page->rpm); 1012
1286 1013 memcpy(&floppy->flexible_disk_page, page, 32);
1287 floppy->flexible_disk_page = *page; 1014 drive->bios_cyl = cyls;
1288 drive->bios_cyl = page->cyls; 1015 drive->bios_head = heads;
1289 drive->bios_head = page->heads; 1016 drive->bios_sect = sectors;
1290 drive->bios_sect = page->sectors;
1291 lba_capacity = floppy->blocks * floppy->block_size; 1017 lba_capacity = floppy->blocks * floppy->block_size;
1018
1292 if (capacity < lba_capacity) { 1019 if (capacity < lba_capacity) {
1293 printk(KERN_NOTICE "%s: The disk reports a capacity of %d " 1020 printk(KERN_NOTICE "%s: The disk reports a capacity of %d "
1294 "bytes, but the drive only handles %d\n", 1021 "bytes, but the drive only handles %d\n",
1295 drive->name, lba_capacity, capacity); 1022 drive->name, lba_capacity, capacity);
1296 floppy->blocks = floppy->block_size ? capacity / floppy->block_size : 0; 1023 floppy->blocks = floppy->block_size ?
1024 capacity / floppy->block_size : 0;
1297 } 1025 }
1298 return 0; 1026 return 0;
1299} 1027}
1300 1028
1301static int idefloppy_get_capability_page(ide_drive_t *drive) 1029static int idefloppy_get_sfrp_bit(ide_drive_t *drive)
1302{ 1030{
1303 idefloppy_floppy_t *floppy = drive->driver_data; 1031 idefloppy_floppy_t *floppy = drive->driver_data;
1304 idefloppy_pc_t pc; 1032 idefloppy_pc_t pc;
1305 idefloppy_mode_parameter_header_t *header;
1306 idefloppy_capabilities_page_t *page;
1307 1033
1308 floppy->srfp = 0; 1034 floppy->srfp = 0;
1309 idefloppy_create_mode_sense_cmd(&pc, IDEFLOPPY_CAPABILITIES_PAGE, 1035 idefloppy_create_mode_sense_cmd(&pc, IDEFLOPPY_CAPABILITIES_PAGE,
1310 MODE_SENSE_CURRENT); 1036 MODE_SENSE_CURRENT);
1311 1037
1312 set_bit(PC_SUPPRESS_ERROR, &pc.flags); 1038 pc.flags |= PC_FLAG_SUPPRESS_ERROR;
1313 if (idefloppy_queue_pc_tail(drive,&pc)) { 1039 if (idefloppy_queue_pc_tail(drive, &pc))
1314 return 1; 1040 return 1;
1315 }
1316 1041
1317 header = (idefloppy_mode_parameter_header_t *) pc.buffer; 1042 floppy->srfp = pc.buffer[8 + 2] & 0x40;
1318 page= (idefloppy_capabilities_page_t *)(header+1);
1319 floppy->srfp = page->srfp;
1320 return (0); 1043 return (0);
1321} 1044}
1322 1045
1323/* 1046/*
1324 * Determine if a media is present in the floppy drive, and if so, 1047 * Determine if a media is present in the floppy drive, and if so, its LBA
1325 * its LBA capacity. 1048 * capacity.
1326 */ 1049 */
1327static int idefloppy_get_capacity (ide_drive_t *drive) 1050static int ide_floppy_get_capacity(ide_drive_t *drive)
1328{ 1051{
1329 idefloppy_floppy_t *floppy = drive->driver_data; 1052 idefloppy_floppy_t *floppy = drive->driver_data;
1330 idefloppy_pc_t pc; 1053 idefloppy_pc_t pc;
1331 idefloppy_capacity_header_t *header; 1054 u8 *cap_desc;
1332 idefloppy_capacity_descriptor_t *descriptor; 1055 u8 header_len, desc_cnt;
1333 int i, descriptors, rc = 1, blocks, length; 1056 int i, rc = 1, blocks, length;
1334 1057
1335 drive->bios_cyl = 0; 1058 drive->bios_cyl = 0;
1336 drive->bios_head = drive->bios_sect = 0; 1059 drive->bios_head = drive->bios_sect = 0;
1337 floppy->blocks = 0; 1060 floppy->blocks = 0;
@@ -1343,44 +1066,55 @@ static int idefloppy_get_capacity (ide_drive_t *drive)
1343 printk(KERN_ERR "ide-floppy: Can't get floppy parameters\n"); 1066 printk(KERN_ERR "ide-floppy: Can't get floppy parameters\n");
1344 return 1; 1067 return 1;
1345 } 1068 }
1346 header = (idefloppy_capacity_header_t *) pc.buffer; 1069 header_len = pc.buffer[3];
1347 descriptors = header->length / sizeof(idefloppy_capacity_descriptor_t); 1070 cap_desc = &pc.buffer[4];
1348 descriptor = (idefloppy_capacity_descriptor_t *) (header + 1); 1071 desc_cnt = header_len / 8; /* capacity descriptor of 8 bytes */
1072
1073 for (i = 0; i < desc_cnt; i++) {
1074 unsigned int desc_start = 4 + i*8;
1075
1076 blocks = be32_to_cpu(*(u32 *)&pc.buffer[desc_start]);
1077 length = be16_to_cpu(*(u16 *)&pc.buffer[desc_start + 6]);
1349 1078
1350 for (i = 0; i < descriptors; i++, descriptor++) { 1079 debug_log("Descriptor %d: %dkB, %d blocks, %d sector size\n",
1351 blocks = descriptor->blocks = ntohl(descriptor->blocks); 1080 i, blocks * length / 1024, blocks, length);
1352 length = descriptor->length = ntohs(descriptor->length);
1353 1081
1354 if (!i) 1082 if (i)
1355 { 1083 continue;
1356 switch (descriptor->dc) { 1084 /*
1085 * the code below is valid only for the 1st descriptor, ie i=0
1086 */
1087
1088 switch (pc.buffer[desc_start + 4] & 0x03) {
1357 /* Clik! drive returns this instead of CAPACITY_CURRENT */ 1089 /* Clik! drive returns this instead of CAPACITY_CURRENT */
1358 case CAPACITY_UNFORMATTED: 1090 case CAPACITY_UNFORMATTED:
1359 if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) 1091 if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE))
1360 /* 1092 /*
1361 * If it is not a clik drive, break out 1093 * If it is not a clik drive, break out
1362 * (maintains previous driver behaviour) 1094 * (maintains previous driver behaviour)
1363 */ 1095 */
1364 break; 1096 break;
1365 case CAPACITY_CURRENT: 1097 case CAPACITY_CURRENT:
1366 /* Normal Zip/LS-120 disks */ 1098 /* Normal Zip/LS-120 disks */
1367 if (memcmp(descriptor, &floppy->capacity, sizeof (idefloppy_capacity_descriptor_t))) 1099 if (memcmp(cap_desc, &floppy->cap_desc, 8))
1368 printk(KERN_INFO "%s: %dkB, %d blocks, %d " 1100 printk(KERN_INFO "%s: %dkB, %d blocks, %d "
1369 "sector size\n", drive->name, 1101 "sector size\n", drive->name,
1370 blocks * length / 1024, blocks, length); 1102 blocks * length / 1024, blocks, length);
1371 floppy->capacity = *descriptor; 1103 memcpy(&floppy->cap_desc, cap_desc, 8);
1104
1372 if (!length || length % 512) { 1105 if (!length || length % 512) {
1373 printk(KERN_NOTICE "%s: %d bytes block size " 1106 printk(KERN_NOTICE "%s: %d bytes block size "
1374 "not supported\n", drive->name, length); 1107 "not supported\n", drive->name, length);
1375 } else { 1108 } else {
1376 floppy->blocks = blocks; 1109 floppy->blocks = blocks;
1377 floppy->block_size = length; 1110 floppy->block_size = length;
1378 if ((floppy->bs_factor = length / 512) != 1) 1111 floppy->bs_factor = length / 512;
1379 printk(KERN_NOTICE "%s: warning: non " 1112 if (floppy->bs_factor != 1)
1113 printk(KERN_NOTICE "%s: warning: non "
1380 "512 bytes block size not " 1114 "512 bytes block size not "
1381 "fully supported\n", 1115 "fully supported\n",
1382 drive->name); 1116 drive->name);
1383 rc = 0; 1117 rc = 0;
1384 } 1118 }
1385 break; 1119 break;
1386 case CAPACITY_NO_CARTRIDGE: 1120 case CAPACITY_NO_CARTRIDGE:
@@ -1395,54 +1129,42 @@ static int idefloppy_get_capacity (ide_drive_t *drive)
1395 "in drive\n", drive->name); 1129 "in drive\n", drive->name);
1396 break; 1130 break;
1397 } 1131 }
1398 } 1132 debug_log("Descriptor 0 Code: %d\n",
1399 if (!i) { 1133 pc.buffer[desc_start + 4] & 0x03);
1400 debug_log( "Descriptor 0 Code: %d\n",
1401 descriptor->dc);
1402 }
1403 debug_log( "Descriptor %d: %dkB, %d blocks, %d "
1404 "sector size\n", i, blocks * length / 1024, blocks,
1405 length);
1406 } 1134 }
1407 1135
1408 /* Clik! disk does not support get_flexible_disk_page */ 1136 /* Clik! disk does not support get_flexible_disk_page */
1409 if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { 1137 if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE))
1410 (void) idefloppy_get_flexible_disk_page(drive); 1138 (void) ide_floppy_get_flexible_disk_page(drive);
1411 }
1412 1139
1413 set_capacity(floppy->disk, floppy->blocks * floppy->bs_factor); 1140 set_capacity(floppy->disk, floppy->blocks * floppy->bs_factor);
1414 return rc; 1141 return rc;
1415} 1142}
1416 1143
1417/* 1144/*
1418** Obtain the list of formattable capacities. 1145 * Obtain the list of formattable capacities.
1419** Very similar to idefloppy_get_capacity, except that we push the capacity 1146 * Very similar to ide_floppy_get_capacity, except that we push the capacity
1420** descriptors to userland, instead of our own structures. 1147 * descriptors to userland, instead of our own structures.
1421** 1148 *
1422** Userland gives us the following structure: 1149 * Userland gives us the following structure:
1423** 1150 *
1424** struct idefloppy_format_capacities { 1151 * struct idefloppy_format_capacities {
1425** int nformats; 1152 * int nformats;
1426** struct { 1153 * struct {
1427** int nblocks; 1154 * int nblocks;
1428** int blocksize; 1155 * int blocksize;
1429** } formats[]; 1156 * } formats[];
1430** } ; 1157 * };
1431** 1158 *
1432** userland initializes nformats to the number of allocated formats[] 1159 * userland initializes nformats to the number of allocated formats[] records.
1433** records. On exit we set nformats to the number of records we've 1160 * On exit we set nformats to the number of records we've actually initialized.
1434** actually initialized. 1161 */
1435** 1162
1436*/ 1163static int ide_floppy_get_format_capacities(ide_drive_t *drive, int __user *arg)
1437
1438static int idefloppy_get_format_capacities(ide_drive_t *drive, int __user *arg)
1439{ 1164{
1440 idefloppy_pc_t pc; 1165 idefloppy_pc_t pc;
1441 idefloppy_capacity_header_t *header; 1166 u8 header_len, desc_cnt;
1442 idefloppy_capacity_descriptor_t *descriptor; 1167 int i, blocks, length, u_array_size, u_index;
1443 int i, descriptors, blocks, length;
1444 int u_array_size;
1445 int u_index;
1446 int __user *argp; 1168 int __user *argp;
1447 1169
1448 if (get_user(u_array_size, arg)) 1170 if (get_user(u_array_size, arg))
@@ -1454,30 +1176,27 @@ static int idefloppy_get_format_capacities(ide_drive_t *drive, int __user *arg)
1454 idefloppy_create_read_capacity_cmd(&pc); 1176 idefloppy_create_read_capacity_cmd(&pc);
1455 if (idefloppy_queue_pc_tail(drive, &pc)) { 1177 if (idefloppy_queue_pc_tail(drive, &pc)) {
1456 printk(KERN_ERR "ide-floppy: Can't get floppy parameters\n"); 1178 printk(KERN_ERR "ide-floppy: Can't get floppy parameters\n");
1457 return (-EIO); 1179 return (-EIO);
1458 } 1180 }
1459 header = (idefloppy_capacity_header_t *) pc.buffer; 1181 header_len = pc.buffer[3];
1460 descriptors = header->length / 1182 desc_cnt = header_len / 8; /* capacity descriptor of 8 bytes */
1461 sizeof(idefloppy_capacity_descriptor_t);
1462 descriptor = (idefloppy_capacity_descriptor_t *) (header + 1);
1463 1183
1464 u_index = 0; 1184 u_index = 0;
1465 argp = arg + 1; 1185 argp = arg + 1;
1466 1186
1467 /* 1187 /*
1468 ** We always skip the first capacity descriptor. That's the 1188 * We always skip the first capacity descriptor. That's the current
1469 ** current capacity. We are interested in the remaining descriptors, 1189 * capacity. We are interested in the remaining descriptors, the
1470 ** the formattable capacities. 1190 * formattable capacities.
1471 */ 1191 */
1192 for (i = 1; i < desc_cnt; i++) {
1193 unsigned int desc_start = 4 + i*8;
1472 1194
1473 for (i=0; i<descriptors; i++, descriptor++) {
1474 if (u_index >= u_array_size) 1195 if (u_index >= u_array_size)
1475 break; /* User-supplied buffer too small */ 1196 break; /* User-supplied buffer too small */
1476 if (i == 0)
1477 continue; /* Skip the first descriptor */
1478 1197
1479 blocks = ntohl(descriptor->blocks); 1198 blocks = be32_to_cpu(*(u32 *)&pc.buffer[desc_start]);
1480 length = ntohs(descriptor->length); 1199 length = be16_to_cpu(*(u16 *)&pc.buffer[desc_start + 6]);
1481 1200
1482 if (put_user(blocks, argp)) 1201 if (put_user(blocks, argp))
1483 return(-EFAULT); 1202 return(-EFAULT);
@@ -1496,53 +1215,14 @@ static int idefloppy_get_format_capacities(ide_drive_t *drive, int __user *arg)
1496} 1215}
1497 1216
1498/* 1217/*
1499** Send ATAPI_FORMAT_UNIT to the drive. 1218 * Get ATAPI_FORMAT_UNIT progress indication.
1500** 1219 *
1501** Userland gives us the following structure: 1220 * Userland gives a pointer to an int. The int is set to a progress
1502** 1221 * indicator 0-65536, with 65536=100%.
1503** struct idefloppy_format_command { 1222 *
1504** int nblocks; 1223 * If the drive does not support format progress indication, we just check
1505** int blocksize; 1224 * the dsc bit, and return either 0 or 65536.
1506** int flags; 1225 */
1507** } ;
1508**
1509** flags is a bitmask, currently, the only defined flag is:
1510**
1511** 0x01 - verify media after format.
1512*/
1513
1514static int idefloppy_begin_format(ide_drive_t *drive, int __user *arg)
1515{
1516 int blocks;
1517 int length;
1518 int flags;
1519 idefloppy_pc_t pc;
1520
1521 if (get_user(blocks, arg) ||
1522 get_user(length, arg+1) ||
1523 get_user(flags, arg+2)) {
1524 return (-EFAULT);
1525 }
1526
1527 /* Get the SFRP bit */
1528 (void) idefloppy_get_capability_page(drive);
1529 idefloppy_create_format_unit_cmd(&pc, blocks, length, flags);
1530 if (idefloppy_queue_pc_tail(drive, &pc)) {
1531 return (-EIO);
1532 }
1533
1534 return (0);
1535}
1536
1537/*
1538** Get ATAPI_FORMAT_UNIT progress indication.
1539**
1540** Userland gives a pointer to an int. The int is set to a progress
1541** indicator 0-65536, with 65536=100%.
1542**
1543** If the drive does not support format progress indication, we just check
1544** the dsc bit, and return either 0 or 65536.
1545*/
1546 1226
1547static int idefloppy_get_format_progress(ide_drive_t *drive, int __user *arg) 1227static int idefloppy_get_format_progress(ide_drive_t *drive, int __user *arg)
1548{ 1228{
@@ -1552,17 +1232,15 @@ static int idefloppy_get_format_progress(ide_drive_t *drive, int __user *arg)
1552 1232
1553 if (floppy->srfp) { 1233 if (floppy->srfp) {
1554 idefloppy_create_request_sense_cmd(&pc); 1234 idefloppy_create_request_sense_cmd(&pc);
1555 if (idefloppy_queue_pc_tail(drive, &pc)) { 1235 if (idefloppy_queue_pc_tail(drive, &pc))
1556 return (-EIO); 1236 return (-EIO);
1557 }
1558 1237
1559 if (floppy->sense_key == 2 && 1238 if (floppy->sense_key == 2 &&
1560 floppy->asc == 4 && 1239 floppy->asc == 4 &&
1561 floppy->ascq == 4) { 1240 floppy->ascq == 4)
1562 progress_indication = floppy->progress_indication; 1241 progress_indication = floppy->progress_indication;
1563 } 1242
1564 /* Else assume format_unit has finished, and we're 1243 /* Else assume format_unit has finished, and we're at 0x10000 */
1565 ** at 0x10000 */
1566 } else { 1244 } else {
1567 unsigned long flags; 1245 unsigned long flags;
1568 u8 stat; 1246 u8 stat;
@@ -1579,10 +1257,7 @@ static int idefloppy_get_format_progress(ide_drive_t *drive, int __user *arg)
1579 return (0); 1257 return (0);
1580} 1258}
1581 1259
1582/* 1260static sector_t idefloppy_capacity(ide_drive_t *drive)
1583 * Return the current floppy capacity.
1584 */
1585static sector_t idefloppy_capacity (ide_drive_t *drive)
1586{ 1261{
1587 idefloppy_floppy_t *floppy = drive->driver_data; 1262 idefloppy_floppy_t *floppy = drive->driver_data;
1588 unsigned long capacity = floppy->blocks * floppy->bs_factor; 1263 unsigned long capacity = floppy->blocks * floppy->bs_factor;
@@ -1591,15 +1266,12 @@ static sector_t idefloppy_capacity (ide_drive_t *drive)
1591} 1266}
1592 1267
1593/* 1268/*
1594 * idefloppy_identify_device checks if we can support a drive, 1269 * Check whether we can support a drive, based on the ATAPI IDENTIFY command
1595 * based on the ATAPI IDENTIFY command results. 1270 * results.
1596 */ 1271 */
1597static int idefloppy_identify_device (ide_drive_t *drive,struct hd_driveid *id) 1272static int idefloppy_identify_device(ide_drive_t *drive, struct hd_driveid *id)
1598{ 1273{
1599 struct idefloppy_id_gcw gcw; 1274 struct idefloppy_id_gcw gcw;
1600#if IDEFLOPPY_DEBUG_INFO
1601 char buffer[80];
1602#endif /* IDEFLOPPY_DEBUG_INFO */
1603 1275
1604 *((u16 *) &gcw) = id->config; 1276 *((u16 *) &gcw) = id->config;
1605 1277
@@ -1608,54 +1280,23 @@ static int idefloppy_identify_device (ide_drive_t *drive,struct hd_driveid *id)
1608 if ((gcw.device_type == 5) && 1280 if ((gcw.device_type == 5) &&
1609 !strstr(id->model, "CD-ROM") && 1281 !strstr(id->model, "CD-ROM") &&
1610 strstr(id->model, "ZIP")) 1282 strstr(id->model, "ZIP"))
1611 gcw.device_type = 0; 1283 gcw.device_type = 0;
1612#endif 1284#endif
1613 1285
1614#if IDEFLOPPY_DEBUG_INFO
1615 printk(KERN_INFO "Dumping ATAPI Identify Device floppy parameters\n");
1616 switch (gcw.protocol) {
1617 case 0: case 1: sprintf(buffer, "ATA");break;
1618 case 2: sprintf(buffer, "ATAPI");break;
1619 case 3: sprintf(buffer, "Reserved (Unknown to ide-floppy)");break;
1620 }
1621 printk(KERN_INFO "Protocol Type: %s\n", buffer);
1622 switch (gcw.device_type) {
1623 case 0: sprintf(buffer, "Direct-access Device");break;
1624 case 1: sprintf(buffer, "Streaming Tape Device");break;
1625 case 2: case 3: case 4: sprintf (buffer, "Reserved");break;
1626 case 5: sprintf(buffer, "CD-ROM Device");break;
1627 case 6: sprintf(buffer, "Reserved");
1628 case 7: sprintf(buffer, "Optical memory Device");break;
1629 case 0x1f: sprintf(buffer, "Unknown or no Device type");break;
1630 default: sprintf(buffer, "Reserved");
1631 }
1632 printk(KERN_INFO "Device Type: %x - %s\n", gcw.device_type, buffer);
1633 printk(KERN_INFO "Removable: %s\n",gcw.removable ? "Yes":"No");
1634 switch (gcw.drq_type) {
1635 case 0: sprintf(buffer, "Microprocessor DRQ");break;
1636 case 1: sprintf(buffer, "Interrupt DRQ");break;
1637 case 2: sprintf(buffer, "Accelerated DRQ");break;
1638 case 3: sprintf(buffer, "Reserved");break;
1639 }
1640 printk(KERN_INFO "Command Packet DRQ Type: %s\n", buffer);
1641 switch (gcw.packet_size) {
1642 case 0: sprintf(buffer, "12 bytes");break;
1643 case 1: sprintf(buffer, "16 bytes");break;
1644 default: sprintf(buffer, "Reserved");break;
1645 }
1646 printk(KERN_INFO "Command Packet Size: %s\n", buffer);
1647#endif /* IDEFLOPPY_DEBUG_INFO */
1648
1649 if (gcw.protocol != 2) 1286 if (gcw.protocol != 2)
1650 printk(KERN_ERR "ide-floppy: Protocol is not ATAPI\n"); 1287 printk(KERN_ERR "ide-floppy: Protocol (0x%02x) is not ATAPI\n",
1288 gcw.protocol);
1651 else if (gcw.device_type != 0) 1289 else if (gcw.device_type != 0)
1652 printk(KERN_ERR "ide-floppy: Device type is not set to floppy\n"); 1290 printk(KERN_ERR "ide-floppy: Device type (0x%02x) is not set "
1291 "to floppy\n", gcw.device_type);
1653 else if (!gcw.removable) 1292 else if (!gcw.removable)
1654 printk(KERN_ERR "ide-floppy: The removable flag is not set\n"); 1293 printk(KERN_ERR "ide-floppy: The removable flag is not set\n");
1655 else if (gcw.drq_type == 3) { 1294 else if (gcw.drq_type == 3) {
1656 printk(KERN_ERR "ide-floppy: Sorry, DRQ type %d not supported\n", gcw.drq_type); 1295 printk(KERN_ERR "ide-floppy: Sorry, DRQ type (0x%02x) not "
1296 "supported\n", gcw.drq_type);
1657 } else if (gcw.packet_size != 0) { 1297 } else if (gcw.packet_size != 0) {
1658 printk(KERN_ERR "ide-floppy: Packet size is not 12 bytes long\n"); 1298 printk(KERN_ERR "ide-floppy: Packet size (0x%02x) is not 12 "
1299 "bytes long\n", gcw.packet_size);
1659 } else 1300 } else
1660 return 1; 1301 return 1;
1661 return 0; 1302 return 0;
@@ -1666,59 +1307,53 @@ static void idefloppy_add_settings(ide_drive_t *drive)
1666{ 1307{
1667 idefloppy_floppy_t *floppy = drive->driver_data; 1308 idefloppy_floppy_t *floppy = drive->driver_data;
1668 1309
1669/* 1310 ide_add_setting(drive, "bios_cyl", SETTING_RW, TYPE_INT, 0, 1023, 1, 1,
1670 * drive setting name read/write data type min max mul_factor div_factor data pointer set function 1311 &drive->bios_cyl, NULL);
1671 */ 1312 ide_add_setting(drive, "bios_head", SETTING_RW, TYPE_BYTE, 0, 255, 1, 1,
1672 ide_add_setting(drive, "bios_cyl", SETTING_RW, TYPE_INT, 0, 1023, 1, 1, &drive->bios_cyl, NULL); 1313 &drive->bios_head, NULL);
1673 ide_add_setting(drive, "bios_head", SETTING_RW, TYPE_BYTE, 0, 255, 1, 1, &drive->bios_head, NULL); 1314 ide_add_setting(drive, "bios_sect", SETTING_RW, TYPE_BYTE, 0, 63, 1, 1,
1674 ide_add_setting(drive, "bios_sect", SETTING_RW, TYPE_BYTE, 0, 63, 1, 1, &drive->bios_sect, NULL); 1315 &drive->bios_sect, NULL);
1675 ide_add_setting(drive, "ticks", SETTING_RW, TYPE_BYTE, 0, 255, 1, 1, &floppy->ticks, NULL); 1316 ide_add_setting(drive, "ticks", SETTING_RW, TYPE_BYTE, 0, 255, 1, 1,
1317 &floppy->ticks, NULL);
1676} 1318}
1677#else 1319#else
1678static inline void idefloppy_add_settings(ide_drive_t *drive) { ; } 1320static inline void idefloppy_add_settings(ide_drive_t *drive) { ; }
1679#endif 1321#endif
1680 1322
1681/* 1323static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy)
1682 * Driver initialization.
1683 */
1684static void idefloppy_setup (ide_drive_t *drive, idefloppy_floppy_t *floppy)
1685{ 1324{
1686 struct idefloppy_id_gcw gcw; 1325 struct idefloppy_id_gcw gcw;
1687 1326
1688 *((u16 *) &gcw) = drive->id->config; 1327 *((u16 *) &gcw) = drive->id->config;
1689 floppy->pc = floppy->pc_stack; 1328 floppy->pc = floppy->pc_stack;
1690 if (gcw.drq_type == 1) 1329 if (gcw.drq_type == 1)
1691 set_bit(IDEFLOPPY_DRQ_INTERRUPT, &floppy->flags); 1330 floppy->flags |= IDEFLOPPY_FLAG_DRQ_INTERRUPT;
1692 /* 1331 /*
1693 * We used to check revisions here. At this point however 1332 * We used to check revisions here. At this point however I'm giving up.
1694 * I'm giving up. Just assume they are all broken, its easier. 1333 * Just assume they are all broken, its easier.
1695 * 1334 *
1696 * The actual reason for the workarounds was likely 1335 * The actual reason for the workarounds was likely a driver bug after
1697 * a driver bug after all rather than a firmware bug, 1336 * all rather than a firmware bug, and the workaround below used to hide
1698 * and the workaround below used to hide it. It should 1337 * it. It should be fixed as of version 1.9, but to be on the safe side
1699 * be fixed as of version 1.9, but to be on the safe side 1338 * we'll leave the limitation below for the 2.2.x tree.
1700 * we'll leave the limitation below for the 2.2.x tree.
1701 */ 1339 */
1702
1703 if (!strncmp(drive->id->model, "IOMEGA ZIP 100 ATAPI", 20)) { 1340 if (!strncmp(drive->id->model, "IOMEGA ZIP 100 ATAPI", 20)) {
1704 set_bit(IDEFLOPPY_ZIP_DRIVE, &floppy->flags); 1341 floppy->flags |= IDEFLOPPY_FLAG_ZIP_DRIVE;
1705 /* This value will be visible in the /proc/ide/hdx/settings */ 1342 /* This value will be visible in the /proc/ide/hdx/settings */
1706 floppy->ticks = IDEFLOPPY_TICKS_DELAY; 1343 floppy->ticks = IDEFLOPPY_TICKS_DELAY;
1707 blk_queue_max_sectors(drive->queue, 64); 1344 blk_queue_max_sectors(drive->queue, 64);
1708 } 1345 }
1709 1346
1710 /* 1347 /*
1711 * Guess what? The IOMEGA Clik! drive also needs the 1348 * Guess what? The IOMEGA Clik! drive also needs the above fix. It makes
1712 * above fix. It makes nasty clicking noises without 1349 * nasty clicking noises without it, so please don't remove this.
1713 * it, so please don't remove this. 1350 */
1714 */
1715 if (strncmp(drive->id->model, "IOMEGA Clik!", 11) == 0) { 1351 if (strncmp(drive->id->model, "IOMEGA Clik!", 11) == 0) {
1716 blk_queue_max_sectors(drive->queue, 64); 1352 blk_queue_max_sectors(drive->queue, 64);
1717 set_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags); 1353 floppy->flags |= IDEFLOPPY_FLAG_CLIK_DRIVE;
1718 } 1354 }
1719 1355
1720 1356 (void) ide_floppy_get_capacity(drive);
1721 (void) idefloppy_get_capacity(drive);
1722 idefloppy_add_settings(drive); 1357 idefloppy_add_settings(drive);
1723} 1358}
1724 1359
@@ -1734,7 +1369,7 @@ static void ide_floppy_remove(ide_drive_t *drive)
1734 ide_floppy_put(floppy); 1369 ide_floppy_put(floppy);
1735} 1370}
1736 1371
1737static void ide_floppy_release(struct kref *kref) 1372static void idefloppy_cleanup_obj(struct kref *kref)
1738{ 1373{
1739 struct ide_floppy_obj *floppy = to_ide_floppy(kref); 1374 struct ide_floppy_obj *floppy = to_ide_floppy(kref);
1740 ide_drive_t *drive = floppy->drive; 1375 ide_drive_t *drive = floppy->drive;
@@ -1747,19 +1382,19 @@ static void ide_floppy_release(struct kref *kref)
1747} 1382}
1748 1383
1749#ifdef CONFIG_IDE_PROC_FS 1384#ifdef CONFIG_IDE_PROC_FS
1750static int proc_idefloppy_read_capacity 1385static int proc_idefloppy_read_capacity(char *page, char **start, off_t off,
1751 (char *page, char **start, off_t off, int count, int *eof, void *data) 1386 int count, int *eof, void *data)
1752{ 1387{
1753 ide_drive_t*drive = (ide_drive_t *)data; 1388 ide_drive_t*drive = (ide_drive_t *)data;
1754 int len; 1389 int len;
1755 1390
1756 len = sprintf(page,"%llu\n", (long long)idefloppy_capacity(drive)); 1391 len = sprintf(page, "%llu\n", (long long)idefloppy_capacity(drive));
1757 PROC_IDE_READ_RETURN(page,start,off,count,eof,len); 1392 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
1758} 1393}
1759 1394
1760static ide_proc_entry_t idefloppy_proc[] = { 1395static ide_proc_entry_t idefloppy_proc[] = {
1761 { "capacity", S_IFREG|S_IRUGO, proc_idefloppy_read_capacity, NULL }, 1396 { "capacity", S_IFREG|S_IRUGO, proc_idefloppy_read_capacity, NULL },
1762 { "geometry", S_IFREG|S_IRUGO, proc_ide_read_geometry, NULL }, 1397 { "geometry", S_IFREG|S_IRUGO, proc_ide_read_geometry, NULL },
1763 { NULL, 0, NULL, NULL } 1398 { NULL, 0, NULL, NULL }
1764}; 1399};
1765#endif /* CONFIG_IDE_PROC_FS */ 1400#endif /* CONFIG_IDE_PROC_FS */
@@ -1794,9 +1429,10 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
1794 idefloppy_pc_t pc; 1429 idefloppy_pc_t pc;
1795 int ret = 0; 1430 int ret = 0;
1796 1431
1797 debug_log(KERN_INFO "Reached idefloppy_open\n"); 1432 debug_log("Reached %s\n", __func__);
1798 1433
1799 if (!(floppy = ide_floppy_get(disk))) 1434 floppy = ide_floppy_get(disk);
1435 if (!floppy)
1800 return -ENXIO; 1436 return -ENXIO;
1801 1437
1802 drive = floppy->drive; 1438 drive = floppy->drive;
@@ -1804,7 +1440,7 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
1804 floppy->openers++; 1440 floppy->openers++;
1805 1441
1806 if (floppy->openers == 1) { 1442 if (floppy->openers == 1) {
1807 clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); 1443 floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS;
1808 /* Just in case */ 1444 /* Just in case */
1809 1445
1810 idefloppy_create_test_unit_ready_cmd(&pc); 1446 idefloppy_create_test_unit_ready_cmd(&pc);
@@ -1813,13 +1449,13 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
1813 (void) idefloppy_queue_pc_tail(drive, &pc); 1449 (void) idefloppy_queue_pc_tail(drive, &pc);
1814 } 1450 }
1815 1451
1816 if (idefloppy_get_capacity (drive) 1452 if (ide_floppy_get_capacity(drive)
1817 && (filp->f_flags & O_NDELAY) == 0 1453 && (filp->f_flags & O_NDELAY) == 0
1818 /* 1454 /*
1819 ** Allow O_NDELAY to open a drive without a disk, or with 1455 * Allow O_NDELAY to open a drive without a disk, or with an
1820 ** an unreadable disk, so that we can get the format 1456 * unreadable disk, so that we can get the format capacity
1821 ** capacity of the drive or begin the format - Sam 1457 * of the drive or begin the format - Sam
1822 */ 1458 */
1823 ) { 1459 ) {
1824 ret = -EIO; 1460 ret = -EIO;
1825 goto out_put_floppy; 1461 goto out_put_floppy;
@@ -1829,14 +1465,14 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
1829 ret = -EROFS; 1465 ret = -EROFS;
1830 goto out_put_floppy; 1466 goto out_put_floppy;
1831 } 1467 }
1832 set_bit(IDEFLOPPY_MEDIA_CHANGED, &floppy->flags); 1468 floppy->flags |= IDEFLOPPY_FLAG_MEDIA_CHANGED;
1833 /* IOMEGA Clik! drives do not support lock/unlock commands */ 1469 /* IOMEGA Clik! drives do not support lock/unlock commands */
1834 if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { 1470 if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) {
1835 idefloppy_create_prevent_cmd(&pc, 1); 1471 idefloppy_create_prevent_cmd(&pc, 1);
1836 (void) idefloppy_queue_pc_tail(drive, &pc); 1472 (void) idefloppy_queue_pc_tail(drive, &pc);
1837 } 1473 }
1838 check_disk_change(inode->i_bdev); 1474 check_disk_change(inode->i_bdev);
1839 } else if (test_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags)) { 1475 } else if (floppy->flags & IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS) {
1840 ret = -EBUSY; 1476 ret = -EBUSY;
1841 goto out_put_floppy; 1477 goto out_put_floppy;
1842 } 1478 }
@@ -1854,17 +1490,17 @@ static int idefloppy_release(struct inode *inode, struct file *filp)
1854 struct ide_floppy_obj *floppy = ide_floppy_g(disk); 1490 struct ide_floppy_obj *floppy = ide_floppy_g(disk);
1855 ide_drive_t *drive = floppy->drive; 1491 ide_drive_t *drive = floppy->drive;
1856 idefloppy_pc_t pc; 1492 idefloppy_pc_t pc;
1857 1493
1858 debug_log(KERN_INFO "Reached idefloppy_release\n"); 1494 debug_log("Reached %s\n", __func__);
1859 1495
1860 if (floppy->openers == 1) { 1496 if (floppy->openers == 1) {
1861 /* IOMEGA Clik! drives do not support lock/unlock commands */ 1497 /* IOMEGA Clik! drives do not support lock/unlock commands */
1862 if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { 1498 if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) {
1863 idefloppy_create_prevent_cmd(&pc, 0); 1499 idefloppy_create_prevent_cmd(&pc, 0);
1864 (void) idefloppy_queue_pc_tail(drive, &pc); 1500 (void) idefloppy_queue_pc_tail(drive, &pc);
1865 } 1501 }
1866 1502
1867 clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); 1503 floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS;
1868 } 1504 }
1869 1505
1870 floppy->openers--; 1506 floppy->openers--;
@@ -1885,64 +1521,105 @@ static int idefloppy_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1885 return 0; 1521 return 0;
1886} 1522}
1887 1523
1524static int ide_floppy_lockdoor(idefloppy_floppy_t *floppy, idefloppy_pc_t *pc,
1525 unsigned long arg, unsigned int cmd)
1526{
1527 if (floppy->openers > 1)
1528 return -EBUSY;
1529
1530 /* The IOMEGA Clik! Drive doesn't support this command -
1531 * no room for an eject mechanism */
1532 if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) {
1533 int prevent = arg ? 1 : 0;
1534
1535 if (cmd == CDROMEJECT)
1536 prevent = 0;
1537
1538 idefloppy_create_prevent_cmd(pc, prevent);
1539 (void) idefloppy_queue_pc_tail(floppy->drive, pc);
1540 }
1541
1542 if (cmd == CDROMEJECT) {
1543 idefloppy_create_start_stop_cmd(pc, 2);
1544 (void) idefloppy_queue_pc_tail(floppy->drive, pc);
1545 }
1546
1547 return 0;
1548}
1549
1550static int ide_floppy_format_unit(idefloppy_floppy_t *floppy,
1551 int __user *arg)
1552{
1553 int blocks, length, flags, err = 0;
1554 idefloppy_pc_t pc;
1555
1556 if (floppy->openers > 1) {
1557 /* Don't format if someone is using the disk */
1558 floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS;
1559 return -EBUSY;
1560 }
1561
1562 floppy->flags |= IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS;
1563
1564 /*
1565 * Send ATAPI_FORMAT_UNIT to the drive.
1566 *
1567 * Userland gives us the following structure:
1568 *
1569 * struct idefloppy_format_command {
1570 * int nblocks;
1571 * int blocksize;
1572 * int flags;
1573 * } ;
1574 *
1575 * flags is a bitmask, currently, the only defined flag is:
1576 *
1577 * 0x01 - verify media after format.
1578 */
1579 if (get_user(blocks, arg) ||
1580 get_user(length, arg+1) ||
1581 get_user(flags, arg+2)) {
1582 err = -EFAULT;
1583 goto out;
1584 }
1585
1586 (void) idefloppy_get_sfrp_bit(floppy->drive);
1587 idefloppy_create_format_unit_cmd(&pc, blocks, length, flags);
1588
1589 if (idefloppy_queue_pc_tail(floppy->drive, &pc))
1590 err = -EIO;
1591
1592out:
1593 if (err)
1594 floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS;
1595 return err;
1596}
1597
1598
1888static int idefloppy_ioctl(struct inode *inode, struct file *file, 1599static int idefloppy_ioctl(struct inode *inode, struct file *file,
1889 unsigned int cmd, unsigned long arg) 1600 unsigned int cmd, unsigned long arg)
1890{ 1601{
1891 struct block_device *bdev = inode->i_bdev; 1602 struct block_device *bdev = inode->i_bdev;
1892 struct ide_floppy_obj *floppy = ide_floppy_g(bdev->bd_disk); 1603 struct ide_floppy_obj *floppy = ide_floppy_g(bdev->bd_disk);
1893 ide_drive_t *drive = floppy->drive; 1604 ide_drive_t *drive = floppy->drive;
1605 idefloppy_pc_t pc;
1894 void __user *argp = (void __user *)arg; 1606 void __user *argp = (void __user *)arg;
1895 int err; 1607 int err;
1896 int prevent = (arg) ? 1 : 0;
1897 idefloppy_pc_t pc;
1898 1608
1899 switch (cmd) { 1609 switch (cmd) {
1900 case CDROMEJECT: 1610 case CDROMEJECT:
1901 prevent = 0;
1902 /* fall through */ 1611 /* fall through */
1903 case CDROM_LOCKDOOR: 1612 case CDROM_LOCKDOOR:
1904 if (floppy->openers > 1) 1613 return ide_floppy_lockdoor(floppy, &pc, arg, cmd);
1905 return -EBUSY;
1906
1907 /* The IOMEGA Clik! Drive doesn't support this command - no room for an eject mechanism */
1908 if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) {
1909 idefloppy_create_prevent_cmd(&pc, prevent);
1910 (void) idefloppy_queue_pc_tail(drive, &pc);
1911 }
1912 if (cmd == CDROMEJECT) {
1913 idefloppy_create_start_stop_cmd(&pc, 2);
1914 (void) idefloppy_queue_pc_tail(drive, &pc);
1915 }
1916 return 0;
1917 case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED: 1614 case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED:
1918 return 0; 1615 return 0;
1919 case IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY: 1616 case IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY:
1920 return idefloppy_get_format_capacities(drive, argp); 1617 return ide_floppy_get_format_capacities(drive, argp);
1921 case IDEFLOPPY_IOCTL_FORMAT_START: 1618 case IDEFLOPPY_IOCTL_FORMAT_START:
1922
1923 if (!(file->f_mode & 2)) 1619 if (!(file->f_mode & 2))
1924 return -EPERM; 1620 return -EPERM;
1925 1621
1926 if (floppy->openers > 1) { 1622 return ide_floppy_format_unit(floppy, (int __user *)arg);
1927 /* Don't format if someone is using the disk */
1928
1929 clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS,
1930 &floppy->flags);
1931 return -EBUSY;
1932 }
1933
1934 set_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags);
1935
1936 err = idefloppy_begin_format(drive, argp);
1937 if (err)
1938 clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags);
1939 return err;
1940 /*
1941 ** Note, the bit will be cleared when the device is
1942 ** closed. This is the cleanest way to handle the
1943 ** situation where the drive does not support
1944 ** format progress reporting.
1945 */
1946 case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS: 1623 case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS:
1947 return idefloppy_get_format_progress(drive, argp); 1624 return idefloppy_get_format_progress(drive, argp);
1948 } 1625 }
@@ -1967,13 +1644,16 @@ static int idefloppy_media_changed(struct gendisk *disk)
1967{ 1644{
1968 struct ide_floppy_obj *floppy = ide_floppy_g(disk); 1645 struct ide_floppy_obj *floppy = ide_floppy_g(disk);
1969 ide_drive_t *drive = floppy->drive; 1646 ide_drive_t *drive = floppy->drive;
1647 int ret;
1970 1648
1971 /* do not scan partitions twice if this is a removable device */ 1649 /* do not scan partitions twice if this is a removable device */
1972 if (drive->attach) { 1650 if (drive->attach) {
1973 drive->attach = 0; 1651 drive->attach = 0;
1974 return 0; 1652 return 0;
1975 } 1653 }
1976 return test_and_clear_bit(IDEFLOPPY_MEDIA_CHANGED, &floppy->flags); 1654 ret = !!(floppy->flags & IDEFLOPPY_FLAG_MEDIA_CHANGED);
1655 floppy->flags &= ~IDEFLOPPY_FLAG_MEDIA_CHANGED;
1656 return ret;
1977} 1657}
1978 1658
1979static int idefloppy_revalidate_disk(struct gendisk *disk) 1659static int idefloppy_revalidate_disk(struct gendisk *disk)
@@ -2004,16 +1684,20 @@ static int ide_floppy_probe(ide_drive_t *drive)
2004 goto failed; 1684 goto failed;
2005 if (drive->media != ide_floppy) 1685 if (drive->media != ide_floppy)
2006 goto failed; 1686 goto failed;
2007 if (!idefloppy_identify_device (drive, drive->id)) { 1687 if (!idefloppy_identify_device(drive, drive->id)) {
2008 printk (KERN_ERR "ide-floppy: %s: not supported by this version of ide-floppy\n", drive->name); 1688 printk(KERN_ERR "ide-floppy: %s: not supported by this version"
1689 " of ide-floppy\n", drive->name);
2009 goto failed; 1690 goto failed;
2010 } 1691 }
2011 if (drive->scsi) { 1692 if (drive->scsi) {
2012 printk("ide-floppy: passing drive %s to ide-scsi emulation.\n", drive->name); 1693 printk(KERN_INFO "ide-floppy: passing drive %s to ide-scsi"
1694 " emulation.\n", drive->name);
2013 goto failed; 1695 goto failed;
2014 } 1696 }
2015 if ((floppy = kzalloc(sizeof (idefloppy_floppy_t), GFP_KERNEL)) == NULL) { 1697 floppy = kzalloc(sizeof(idefloppy_floppy_t), GFP_KERNEL);
2016 printk (KERN_ERR "ide-floppy: %s: Can't allocate a floppy structure\n", drive->name); 1698 if (!floppy) {
1699 printk(KERN_ERR "ide-floppy: %s: Can't allocate a floppy"
1700 " structure\n", drive->name);
2017 goto failed; 1701 goto failed;
2018 } 1702 }
2019 1703
@@ -2035,7 +1719,7 @@ static int ide_floppy_probe(ide_drive_t *drive)
2035 1719
2036 drive->driver_data = floppy; 1720 drive->driver_data = floppy;
2037 1721
2038 idefloppy_setup (drive, floppy); 1722 idefloppy_setup(drive, floppy);
2039 1723
2040 g->minors = 1 << PARTN_BITS; 1724 g->minors = 1 << PARTN_BITS;
2041 g->driverfs_dev = &drive->gendev; 1725 g->driverfs_dev = &drive->gendev;
@@ -2051,9 +1735,7 @@ failed:
2051 return -ENODEV; 1735 return -ENODEV;
2052} 1736}
2053 1737
2054MODULE_DESCRIPTION("ATAPI FLOPPY Driver"); 1738static void __exit idefloppy_exit(void)
2055
2056static void __exit idefloppy_exit (void)
2057{ 1739{
2058 driver_unregister(&idefloppy_driver.gen_driver); 1740 driver_unregister(&idefloppy_driver.gen_driver);
2059} 1741}
@@ -2068,3 +1750,5 @@ MODULE_ALIAS("ide:*m-floppy*");
2068module_init(idefloppy_init); 1750module_init(idefloppy_init);
2069module_exit(idefloppy_exit); 1751module_exit(idefloppy_exit);
2070MODULE_LICENSE("GPL"); 1752MODULE_LICENSE("GPL");
1753MODULE_DESCRIPTION("ATAPI FLOPPY Driver");
1754
diff --git a/drivers/ide/ide-generic.c b/drivers/ide/ide-generic.c
index bb30c29f6ec0..be469dbbe8fb 100644
--- a/drivers/ide/ide-generic.c
+++ b/drivers/ide/ide-generic.c
@@ -23,7 +23,7 @@ static int __init ide_generic_init(void)
23 for (i = 0; i < MAX_HWIFS; i++) 23 for (i = 0; i < MAX_HWIFS; i++)
24 idx[i] = ide_hwifs[i].present ? 0xff : i; 24 idx[i] = ide_hwifs[i].present ? 0xff : i;
25 25
26 ide_device_add_all(idx); 26 ide_device_add_all(idx, NULL);
27 27
28 if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET]) 28 if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
29 ide_release_lock(); /* for atari only */ 29 ide_release_lock(); /* for atari only */
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index 16b1f6e12781..a95178f5e1bb 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -163,8 +163,6 @@ void SELECT_DRIVE (ide_drive_t *drive)
163 HWIF(drive)->OUTB(drive->select.all, IDE_SELECT_REG); 163 HWIF(drive)->OUTB(drive->select.all, IDE_SELECT_REG);
164} 164}
165 165
166EXPORT_SYMBOL(SELECT_DRIVE);
167
168void SELECT_MASK (ide_drive_t *drive, int mask) 166void SELECT_MASK (ide_drive_t *drive, int mask)
169{ 167{
170 if (HWIF(drive)->maskproc) 168 if (HWIF(drive)->maskproc)
@@ -614,66 +612,6 @@ no_80w:
614 return 0; 612 return 0;
615} 613}
616 614
617int ide_ata66_check (ide_drive_t *drive, ide_task_t *args)
618{
619 if (args->tf.command == WIN_SETFEATURES &&
620 args->tf.nsect > XFER_UDMA_2 &&
621 args->tf.feature == SETFEATURES_XFER) {
622 if (eighty_ninty_three(drive) == 0) {
623 printk(KERN_WARNING "%s: UDMA speeds >UDMA33 cannot "
624 "be set\n", drive->name);
625 return 1;
626 }
627 }
628
629 return 0;
630}
631
632/*
633 * Backside of HDIO_DRIVE_CMD call of SETFEATURES_XFER.
634 * 1 : Safe to update drive->id DMA registers.
635 * 0 : OOPs not allowed.
636 */
637int set_transfer (ide_drive_t *drive, ide_task_t *args)
638{
639 if (args->tf.command == WIN_SETFEATURES &&
640 args->tf.nsect >= XFER_SW_DMA_0 &&
641 args->tf.feature == SETFEATURES_XFER &&
642 (drive->id->dma_ultra ||
643 drive->id->dma_mword ||
644 drive->id->dma_1word))
645 return 1;
646
647 return 0;
648}
649
650#ifdef CONFIG_BLK_DEV_IDEDMA
651static u8 ide_auto_reduce_xfer (ide_drive_t *drive)
652{
653 if (!drive->crc_count)
654 return drive->current_speed;
655 drive->crc_count = 0;
656
657 switch(drive->current_speed) {
658 case XFER_UDMA_7: return XFER_UDMA_6;
659 case XFER_UDMA_6: return XFER_UDMA_5;
660 case XFER_UDMA_5: return XFER_UDMA_4;
661 case XFER_UDMA_4: return XFER_UDMA_3;
662 case XFER_UDMA_3: return XFER_UDMA_2;
663 case XFER_UDMA_2: return XFER_UDMA_1;
664 case XFER_UDMA_1: return XFER_UDMA_0;
665 /*
666 * OOPS we do not goto non Ultra DMA modes
667 * without iCRC's available we force
668 * the system to PIO and make the user
669 * invoke the ATA-1 ATA-2 DMA modes.
670 */
671 case XFER_UDMA_0:
672 default: return XFER_PIO_4;
673 }
674}
675#endif /* CONFIG_BLK_DEV_IDEDMA */
676
677int ide_driveid_update(ide_drive_t *drive) 615int ide_driveid_update(ide_drive_t *drive)
678{ 616{
679 ide_hwif_t *hwif = drive->hwif; 617 ide_hwif_t *hwif = drive->hwif;
@@ -882,22 +820,17 @@ void ide_execute_command(ide_drive_t *drive, u8 cmd, ide_handler_t *handler,
882 unsigned long flags; 820 unsigned long flags;
883 ide_hwgroup_t *hwgroup = HWGROUP(drive); 821 ide_hwgroup_t *hwgroup = HWGROUP(drive);
884 ide_hwif_t *hwif = HWIF(drive); 822 ide_hwif_t *hwif = HWIF(drive);
885 823
886 spin_lock_irqsave(&ide_lock, flags); 824 spin_lock_irqsave(&ide_lock, flags);
887
888 BUG_ON(hwgroup->handler); 825 BUG_ON(hwgroup->handler);
889 hwgroup->handler = handler; 826 __ide_set_handler(drive, handler, timeout, expiry);
890 hwgroup->expiry = expiry;
891 hwgroup->timer.expires = jiffies + timeout;
892 hwgroup->req_gen_timer = hwgroup->req_gen;
893 add_timer(&hwgroup->timer);
894 hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); 827 hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG);
895 /* Drive takes 400nS to respond, we must avoid the IRQ being 828 /*
896 serviced before that. 829 * Drive takes 400nS to respond, we must avoid the IRQ being
897 830 * serviced before that.
898 FIXME: we could skip this delay with care on non shared 831 *
899 devices 832 * FIXME: we could skip this delay with care on non shared devices
900 */ 833 */
901 ndelay(400); 834 ndelay(400);
902 spin_unlock_irqrestore(&ide_lock, flags); 835 spin_unlock_irqrestore(&ide_lock, flags);
903} 836}
@@ -1005,19 +938,6 @@ static ide_startstop_t reset_pollfunc (ide_drive_t *drive)
1005 return ide_stopped; 938 return ide_stopped;
1006} 939}
1007 940
1008static void check_dma_crc(ide_drive_t *drive)
1009{
1010#ifdef CONFIG_BLK_DEV_IDEDMA
1011 if (drive->crc_count) {
1012 ide_dma_off_quietly(drive);
1013 ide_set_xfer_rate(drive, ide_auto_reduce_xfer(drive));
1014 if (drive->current_speed >= XFER_SW_DMA_0)
1015 ide_dma_on(drive);
1016 } else
1017 ide_dma_off(drive);
1018#endif
1019}
1020
1021static void ide_disk_pre_reset(ide_drive_t *drive) 941static void ide_disk_pre_reset(ide_drive_t *drive)
1022{ 942{
1023 int legacy = (drive->id->cfs_enable_2 & 0x0400) ? 0 : 1; 943 int legacy = (drive->id->cfs_enable_2 & 0x0400) ? 0 : 1;
@@ -1039,17 +959,20 @@ static void pre_reset(ide_drive_t *drive)
1039 else 959 else
1040 drive->post_reset = 1; 960 drive->post_reset = 1;
1041 961
962 if (drive->using_dma) {
963 if (drive->crc_count)
964 ide_check_dma_crc(drive);
965 else
966 ide_dma_off(drive);
967 }
968
1042 if (!drive->keep_settings) { 969 if (!drive->keep_settings) {
1043 if (drive->using_dma) { 970 if (!drive->using_dma) {
1044 check_dma_crc(drive);
1045 } else {
1046 drive->unmask = 0; 971 drive->unmask = 0;
1047 drive->io_32bit = 0; 972 drive->io_32bit = 0;
1048 } 973 }
1049 return; 974 return;
1050 } 975 }
1051 if (drive->using_dma)
1052 check_dma_crc(drive);
1053 976
1054 if (HWIF(drive)->pre_reset != NULL) 977 if (HWIF(drive)->pre_reset != NULL)
1055 HWIF(drive)->pre_reset(drive); 978 HWIF(drive)->pre_reset(drive);
diff --git a/drivers/ide/ide-pnp.c b/drivers/ide/ide-pnp.c
index 4bda5cf2be37..b163b2e52212 100644
--- a/drivers/ide/ide-pnp.c
+++ b/drivers/ide/ide-pnp.c
@@ -49,7 +49,7 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
49 printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index); 49 printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
50 pnp_set_drvdata(dev,hwif); 50 pnp_set_drvdata(dev,hwif);
51 51
52 ide_device_add(idx); 52 ide_device_add(idx, NULL);
53 53
54 return 0; 54 return 0;
55 } 55 }
@@ -60,9 +60,10 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id
60static void idepnp_remove(struct pnp_dev * dev) 60static void idepnp_remove(struct pnp_dev * dev)
61{ 61{
62 ide_hwif_t *hwif = pnp_get_drvdata(dev); 62 ide_hwif_t *hwif = pnp_get_drvdata(dev);
63 if (hwif) { 63
64 ide_unregister(hwif->index); 64 if (hwif)
65 } else 65 ide_unregister(hwif->index, 0, 0);
66 else
66 printk(KERN_ERR "idepnp: Unable to remove device, please report.\n"); 67 printk(KERN_ERR "idepnp: Unable to remove device, please report.\n");
67} 68}
68 69
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 98a8af44bf64..9c07bdb68d1a 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -423,8 +423,9 @@ static int ide_busy_sleep(ide_hwif_t *hwif)
423 423
424static int do_probe (ide_drive_t *drive, u8 cmd) 424static int do_probe (ide_drive_t *drive, u8 cmd)
425{ 425{
426 int rc;
427 ide_hwif_t *hwif = HWIF(drive); 426 ide_hwif_t *hwif = HWIF(drive);
427 int rc;
428 u8 stat;
428 429
429 if (drive->present) { 430 if (drive->present) {
430 /* avoid waiting for inappropriate probes */ 431 /* avoid waiting for inappropriate probes */
@@ -461,15 +462,17 @@ static int do_probe (ide_drive_t *drive, u8 cmd)
461 /* failed: try again */ 462 /* failed: try again */
462 rc = try_to_identify(drive,cmd); 463 rc = try_to_identify(drive,cmd);
463 } 464 }
464 if (hwif->INB(IDE_STATUS_REG) == (BUSY_STAT|READY_STAT)) 465
466 stat = hwif->INB(IDE_STATUS_REG);
467
468 if (stat == (BUSY_STAT | READY_STAT))
465 return 4; 469 return 4;
466 470
467 if ((rc == 1 && cmd == WIN_PIDENTIFY) && 471 if ((rc == 1 && cmd == WIN_PIDENTIFY) &&
468 ((drive->autotune == IDE_TUNE_DEFAULT) || 472 ((drive->autotune == IDE_TUNE_DEFAULT) ||
469 (drive->autotune == IDE_TUNE_AUTO))) { 473 (drive->autotune == IDE_TUNE_AUTO))) {
470 printk("%s: no response (status = 0x%02x), " 474 printk(KERN_ERR "%s: no response (status = 0x%02x), "
471 "resetting drive\n", drive->name, 475 "resetting drive\n", drive->name, stat);
472 hwif->INB(IDE_STATUS_REG));
473 msleep(50); 476 msleep(50);
474 hwif->OUTB(drive->select.all, IDE_SELECT_REG); 477 hwif->OUTB(drive->select.all, IDE_SELECT_REG);
475 msleep(50); 478 msleep(50);
@@ -477,11 +480,13 @@ static int do_probe (ide_drive_t *drive, u8 cmd)
477 (void)ide_busy_sleep(hwif); 480 (void)ide_busy_sleep(hwif);
478 rc = try_to_identify(drive, cmd); 481 rc = try_to_identify(drive, cmd);
479 } 482 }
483
484 /* ensure drive IRQ is clear */
485 stat = hwif->INB(IDE_STATUS_REG);
486
480 if (rc == 1) 487 if (rc == 1)
481 printk("%s: no response (status = 0x%02x)\n", 488 printk(KERN_ERR "%s: no response (status = 0x%02x)\n",
482 drive->name, hwif->INB(IDE_STATUS_REG)); 489 drive->name, stat);
483 /* ensure drive irq is clear */
484 (void) hwif->INB(IDE_STATUS_REG);
485 } else { 490 } else {
486 /* not present or maybe ATAPI */ 491 /* not present or maybe ATAPI */
487 rc = 3; 492 rc = 3;
@@ -502,6 +507,7 @@ static int do_probe (ide_drive_t *drive, u8 cmd)
502static void enable_nest (ide_drive_t *drive) 507static void enable_nest (ide_drive_t *drive)
503{ 508{
504 ide_hwif_t *hwif = HWIF(drive); 509 ide_hwif_t *hwif = HWIF(drive);
510 u8 stat;
505 511
506 printk("%s: enabling %s -- ", hwif->name, drive->id->model); 512 printk("%s: enabling %s -- ", hwif->name, drive->id->model);
507 SELECT_DRIVE(drive); 513 SELECT_DRIVE(drive);
@@ -515,11 +521,12 @@ static void enable_nest (ide_drive_t *drive)
515 521
516 msleep(50); 522 msleep(50);
517 523
518 if (!OK_STAT((hwif->INB(IDE_STATUS_REG)), 0, BAD_STAT)) { 524 stat = hwif->INB(IDE_STATUS_REG);
519 printk("failed (status = 0x%02x)\n", hwif->INB(IDE_STATUS_REG)); 525
520 } else { 526 if (!OK_STAT(stat, 0, BAD_STAT))
521 printk("success\n"); 527 printk(KERN_CONT "failed (status = 0x%02x)\n", stat);
522 } 528 else
529 printk(KERN_CONT "success\n");
523 530
524 /* if !(success||timed-out) */ 531 /* if !(success||timed-out) */
525 if (do_probe(drive, WIN_IDENTIFY) >= 2) { 532 if (do_probe(drive, WIN_IDENTIFY) >= 2) {
@@ -822,7 +829,7 @@ static void ide_port_tune_devices(ide_hwif_t *hwif)
822 for (unit = 0; unit < MAX_DRIVES; ++unit) { 829 for (unit = 0; unit < MAX_DRIVES; ++unit) {
823 ide_drive_t *drive = &hwif->drives[unit]; 830 ide_drive_t *drive = &hwif->drives[unit];
824 831
825 if (hwif->no_io_32bit) 832 if (hwif->host_flags & IDE_HFLAG_NO_IO_32BIT)
826 drive->no_io_32bit = 1; 833 drive->no_io_32bit = 1;
827 else 834 else
828 drive->no_io_32bit = drive->id->dword_io ? 1 : 0; 835 drive->no_io_32bit = drive->id->dword_io ? 1 : 0;
@@ -881,13 +888,6 @@ static int ide_init_queue(ide_drive_t *drive)
881 q->queuedata = drive; 888 q->queuedata = drive;
882 blk_queue_segment_boundary(q, 0xffff); 889 blk_queue_segment_boundary(q, 0xffff);
883 890
884 if (!hwif->rqsize) {
885 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48) ||
886 (hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA))
887 hwif->rqsize = 256;
888 else
889 hwif->rqsize = 65536;
890 }
891 if (hwif->rqsize < max_sectors) 891 if (hwif->rqsize < max_sectors)
892 max_sectors = hwif->rqsize; 892 max_sectors = hwif->rqsize;
893 blk_queue_max_sectors(q, max_sectors); 893 blk_queue_max_sectors(q, max_sectors);
@@ -918,6 +918,48 @@ static int ide_init_queue(ide_drive_t *drive)
918 return 0; 918 return 0;
919} 919}
920 920
921static void ide_add_drive_to_hwgroup(ide_drive_t *drive)
922{
923 ide_hwgroup_t *hwgroup = drive->hwif->hwgroup;
924
925 spin_lock_irq(&ide_lock);
926 if (!hwgroup->drive) {
927 /* first drive for hwgroup. */
928 drive->next = drive;
929 hwgroup->drive = drive;
930 hwgroup->hwif = HWIF(hwgroup->drive);
931 } else {
932 drive->next = hwgroup->drive->next;
933 hwgroup->drive->next = drive;
934 }
935 spin_unlock_irq(&ide_lock);
936}
937
938/*
939 * For any present drive:
940 * - allocate the block device queue
941 * - link drive into the hwgroup
942 */
943static void ide_port_setup_devices(ide_hwif_t *hwif)
944{
945 int i;
946
947 for (i = 0; i < MAX_DRIVES; i++) {
948 ide_drive_t *drive = &hwif->drives[i];
949
950 if (!drive->present)
951 continue;
952
953 if (ide_init_queue(drive)) {
954 printk(KERN_ERR "ide: failed to init %s\n",
955 drive->name);
956 continue;
957 }
958
959 ide_add_drive_to_hwgroup(drive);
960 }
961}
962
921/* 963/*
922 * This routine sets up the irq for an ide interface, and creates a new 964 * This routine sets up the irq for an ide interface, and creates a new
923 * hwgroup for the irq/hwif if none was previously assigned. 965 * hwgroup for the irq/hwif if none was previously assigned.
@@ -1019,30 +1061,12 @@ static int init_irq (ide_hwif_t *hwif)
1019 goto out_unlink; 1061 goto out_unlink;
1020 } 1062 }
1021 1063
1022 /* 1064 if (!hwif->rqsize) {
1023 * For any present drive: 1065 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48) ||
1024 * - allocate the block device queue 1066 (hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA))
1025 * - link drive into the hwgroup 1067 hwif->rqsize = 256;
1026 */ 1068 else
1027 for (index = 0; index < MAX_DRIVES; ++index) { 1069 hwif->rqsize = 65536;
1028 ide_drive_t *drive = &hwif->drives[index];
1029 if (!drive->present)
1030 continue;
1031 if (ide_init_queue(drive)) {
1032 printk(KERN_ERR "ide: failed to init %s\n",drive->name);
1033 continue;
1034 }
1035 spin_lock_irq(&ide_lock);
1036 if (!hwgroup->drive) {
1037 /* first drive for hwgroup. */
1038 drive->next = drive;
1039 hwgroup->drive = drive;
1040 hwgroup->hwif = HWIF(hwgroup->drive);
1041 } else {
1042 drive->next = hwgroup->drive->next;
1043 hwgroup->drive->next = drive;
1044 }
1045 spin_unlock_irq(&ide_lock);
1046 } 1070 }
1047 1071
1048#if !defined(__mc68000__) && !defined(CONFIG_APUS) 1072#if !defined(__mc68000__) && !defined(CONFIG_APUS)
@@ -1058,6 +1082,9 @@ static int init_irq (ide_hwif_t *hwif)
1058 printk(" (%sed with %s)", 1082 printk(" (%sed with %s)",
1059 hwif->sharing_irq ? "shar" : "serializ", match->name); 1083 hwif->sharing_irq ? "shar" : "serializ", match->name);
1060 printk("\n"); 1084 printk("\n");
1085
1086 ide_port_setup_devices(hwif);
1087
1061 mutex_unlock(&ide_cfg_mtx); 1088 mutex_unlock(&ide_cfg_mtx);
1062 return 0; 1089 return 0;
1063out_unlink: 1090out_unlink:
@@ -1182,30 +1209,6 @@ static void drive_release_dev (struct device *dev)
1182 complete(&drive->gendev_rel_comp); 1209 complete(&drive->gendev_rel_comp);
1183} 1210}
1184 1211
1185/*
1186 * init_gendisk() (as opposed to ide_geninit) is called for each major device,
1187 * after probing for drives, to allocate partition tables and other data
1188 * structures needed for the routines in genhd.c. ide_geninit() gets called
1189 * somewhat later, during the partition check.
1190 */
1191static void init_gendisk (ide_hwif_t *hwif)
1192{
1193 unsigned int unit;
1194
1195 for (unit = 0; unit < MAX_DRIVES; ++unit) {
1196 ide_drive_t * drive = &hwif->drives[unit];
1197 ide_add_generic_settings(drive);
1198 snprintf(drive->gendev.bus_id,BUS_ID_SIZE,"%u.%u",
1199 hwif->index,unit);
1200 drive->gendev.parent = &hwif->gendev;
1201 drive->gendev.bus = &ide_bus_type;
1202 drive->gendev.driver_data = drive;
1203 drive->gendev.release = drive_release_dev;
1204 }
1205 blk_register_region(MKDEV(hwif->major, 0), MAX_DRIVES << PARTN_BITS,
1206 THIS_MODULE, ata_probe, ata_lock, hwif);
1207}
1208
1209static int hwif_init(ide_hwif_t *hwif) 1212static int hwif_init(ide_hwif_t *hwif)
1210{ 1213{
1211 int old_irq; 1214 int old_irq;
@@ -1262,8 +1265,8 @@ static int hwif_init(ide_hwif_t *hwif)
1262 hwif->name, hwif->irq); 1265 hwif->name, hwif->irq);
1263 1266
1264done: 1267done:
1265 init_gendisk(hwif); 1268 blk_register_region(MKDEV(hwif->major, 0), MAX_DRIVES << PARTN_BITS,
1266 ide_acpi_init(hwif); 1269 THIS_MODULE, ata_probe, ata_lock, hwif);
1267 return 1; 1270 return 1;
1268 1271
1269out: 1272out:
@@ -1277,24 +1280,119 @@ static void hwif_register_devices(ide_hwif_t *hwif)
1277 1280
1278 for (i = 0; i < MAX_DRIVES; i++) { 1281 for (i = 0; i < MAX_DRIVES; i++) {
1279 ide_drive_t *drive = &hwif->drives[i]; 1282 ide_drive_t *drive = &hwif->drives[i];
1283 struct device *dev = &drive->gendev;
1284 int ret;
1280 1285
1281 if (drive->present) { 1286 if (!drive->present)
1282 int ret = device_register(&drive->gendev); 1287 continue;
1283 1288
1284 if (ret < 0) 1289 ide_add_generic_settings(drive);
1285 printk(KERN_WARNING "IDE: %s: " 1290
1286 "device_register error: %d\n", 1291 snprintf(dev->bus_id, BUS_ID_SIZE, "%u.%u", hwif->index, i);
1287 __FUNCTION__, ret); 1292 dev->parent = &hwif->gendev;
1288 } 1293 dev->bus = &ide_bus_type;
1294 dev->driver_data = drive;
1295 dev->release = drive_release_dev;
1296
1297 ret = device_register(dev);
1298 if (ret < 0)
1299 printk(KERN_WARNING "IDE: %s: device_register error: "
1300 "%d\n", __func__, ret);
1301 }
1302}
1303
1304static void ide_port_init_devices(ide_hwif_t *hwif)
1305{
1306 int i;
1307
1308 for (i = 0; i < MAX_DRIVES; i++) {
1309 ide_drive_t *drive = &hwif->drives[i];
1310
1311 if (hwif->host_flags & IDE_HFLAG_IO_32BIT)
1312 drive->io_32bit = 1;
1313 if (hwif->host_flags & IDE_HFLAG_UNMASK_IRQS)
1314 drive->unmask = 1;
1315 if (hwif->host_flags & IDE_HFLAG_NO_UNMASK_IRQS)
1316 drive->no_unmask = 1;
1317 if ((hwif->host_flags & IDE_HFLAG_NO_AUTOTUNE) == 0)
1318 drive->autotune = 1;
1319 }
1320
1321 if (hwif->port_init_devs)
1322 hwif->port_init_devs(hwif);
1323}
1324
1325static void ide_init_port(ide_hwif_t *hwif, unsigned int port,
1326 const struct ide_port_info *d)
1327{
1328 if (d->chipset != ide_etrax100)
1329 hwif->channel = port;
1330
1331 if (d->chipset)
1332 hwif->chipset = d->chipset;
1333
1334 if (d->init_iops)
1335 d->init_iops(hwif);
1336
1337 if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0)
1338 ide_hwif_setup_dma(hwif, d);
1339
1340 if ((!hwif->irq && (d->host_flags & IDE_HFLAG_LEGACY_IRQS)) ||
1341 (d->host_flags & IDE_HFLAG_FORCE_LEGACY_IRQS))
1342 hwif->irq = port ? 15 : 14;
1343
1344 hwif->host_flags = d->host_flags;
1345 hwif->pio_mask = d->pio_mask;
1346
1347 if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate)
1348 hwif->mate->serialized = hwif->serialized = 1;
1349
1350 hwif->swdma_mask = d->swdma_mask;
1351 hwif->mwdma_mask = d->mwdma_mask;
1352 hwif->ultra_mask = d->udma_mask;
1353
1354 /* reset DMA masks only for SFF-style DMA controllers */
1355 if ((d->host_flags && IDE_HFLAG_NO_DMA) == 0 && hwif->dma_base == 0)
1356 hwif->swdma_mask = hwif->mwdma_mask = hwif->ultra_mask = 0;
1357
1358 if (d->host_flags & IDE_HFLAG_RQSIZE_256)
1359 hwif->rqsize = 256;
1360
1361 /* call chipset specific routine for each enabled port */
1362 if (d->init_hwif)
1363 d->init_hwif(hwif);
1364
1365 if (hwif->cable_detect && (hwif->ultra_mask & 0x78)) {
1366 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
1367 hwif->cbl = hwif->cable_detect(hwif);
1289 } 1368 }
1290} 1369}
1291 1370
1292int ide_device_add_all(u8 *idx) 1371int ide_device_add_all(u8 *idx, const struct ide_port_info *d)
1293{ 1372{
1294 ide_hwif_t *hwif; 1373 ide_hwif_t *hwif, *mate = NULL;
1295 int i, rc = 0; 1374 int i, rc = 0;
1296 1375
1297 for (i = 0; i < MAX_HWIFS; i++) { 1376 for (i = 0; i < MAX_HWIFS; i++) {
1377 if (d == NULL || idx[i] == 0xff) {
1378 mate = NULL;
1379 continue;
1380 }
1381
1382 hwif = &ide_hwifs[idx[i]];
1383
1384 if (d->chipset != ide_etrax100 && (i & 1) && mate) {
1385 hwif->mate = mate;
1386 mate->mate = hwif;
1387 }
1388
1389 mate = (i & 1) ? NULL : hwif;
1390
1391 ide_init_port(hwif, i & 1, d);
1392 ide_port_init_devices(hwif);
1393 }
1394
1395 for (i = 0; i < MAX_HWIFS; i++) {
1298 if (idx[i] == 0xff) 1396 if (idx[i] == 0xff)
1299 continue; 1397 continue;
1300 1398
@@ -1337,6 +1435,9 @@ int ide_device_add_all(u8 *idx)
1337 rc = -1; 1435 rc = -1;
1338 continue; 1436 continue;
1339 } 1437 }
1438
1439 ide_acpi_init(hwif);
1440 ide_acpi_port_init_devices(hwif);
1340 } 1441 }
1341 1442
1342 for (i = 0; i < MAX_HWIFS; i++) { 1443 for (i = 0; i < MAX_HWIFS; i++) {
@@ -1354,15 +1455,22 @@ int ide_device_add_all(u8 *idx)
1354 } 1455 }
1355 1456
1356 for (i = 0; i < MAX_HWIFS; i++) { 1457 for (i = 0; i < MAX_HWIFS; i++) {
1357 if (idx[i] != 0xff) 1458 if (idx[i] == 0xff)
1358 ide_proc_register_port(&ide_hwifs[idx[i]]); 1459 continue;
1460
1461 hwif = &ide_hwifs[idx[i]];
1462
1463 if (hwif->present) {
1464 ide_proc_register_port(hwif);
1465 ide_proc_port_register_devices(hwif);
1466 }
1359 } 1467 }
1360 1468
1361 return rc; 1469 return rc;
1362} 1470}
1363EXPORT_SYMBOL_GPL(ide_device_add_all); 1471EXPORT_SYMBOL_GPL(ide_device_add_all);
1364 1472
1365int ide_device_add(u8 idx[4]) 1473int ide_device_add(u8 idx[4], const struct ide_port_info *d)
1366{ 1474{
1367 u8 idx_all[MAX_HWIFS]; 1475 u8 idx_all[MAX_HWIFS];
1368 int i; 1476 int i;
@@ -1370,6 +1478,6 @@ int ide_device_add(u8 idx[4])
1370 for (i = 0; i < MAX_HWIFS; i++) 1478 for (i = 0; i < MAX_HWIFS; i++)
1371 idx_all[i] = (i < 4) ? idx[i] : 0xff; 1479 idx_all[i] = (i < 4) ? idx[i] : 0xff;
1372 1480
1373 return ide_device_add_all(idx_all); 1481 return ide_device_add_all(idx_all, d);
1374} 1482}
1375EXPORT_SYMBOL_GPL(ide_device_add); 1483EXPORT_SYMBOL_GPL(ide_device_add);
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c
index 00c249cba236..975c0ff0f438 100644
--- a/drivers/ide/ide-proc.c
+++ b/drivers/ide/ide-proc.c
@@ -739,7 +739,7 @@ void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver)
739 739
740EXPORT_SYMBOL(ide_proc_unregister_driver); 740EXPORT_SYMBOL(ide_proc_unregister_driver);
741 741
742static void create_proc_ide_drives(ide_hwif_t *hwif) 742void ide_proc_port_register_devices(ide_hwif_t *hwif)
743{ 743{
744 int d; 744 int d;
745 struct proc_dir_entry *ent; 745 struct proc_dir_entry *ent;
@@ -793,9 +793,6 @@ static ide_proc_entry_t hwif_entries[] = {
793 793
794void ide_proc_register_port(ide_hwif_t *hwif) 794void ide_proc_register_port(ide_hwif_t *hwif)
795{ 795{
796 if (!hwif->present)
797 return;
798
799 if (!hwif->proc) { 796 if (!hwif->proc) {
800 hwif->proc = proc_mkdir(hwif->name, proc_ide_root); 797 hwif->proc = proc_mkdir(hwif->name, proc_ide_root);
801 798
@@ -804,8 +801,6 @@ void ide_proc_register_port(ide_hwif_t *hwif)
804 801
805 ide_add_proc_entries(hwif->proc, hwif_entries, hwif); 802 ide_add_proc_entries(hwif->proc, hwif_entries, hwif);
806 } 803 }
807
808 create_proc_ide_drives(hwif);
809} 804}
810 805
811#ifdef CONFIG_BLK_DEV_IDEPCI 806#ifdef CONFIG_BLK_DEV_IDEPCI
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index 5aef63acf1e8..bf40d8c824ad 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -1,424 +1,18 @@
1/* 1/*
2 * IDE ATAPI streaming tape driver.
3 *
2 * Copyright (C) 1995-1999 Gadi Oxman <gadio@netvision.net.il> 4 * Copyright (C) 1995-1999 Gadi Oxman <gadio@netvision.net.il>
3 * Copyright (C) 2003-2005 Bartlomiej Zolnierkiewicz 5 * Copyright (C) 2003-2005 Bartlomiej Zolnierkiewicz
4 * 6 *
5 * $Header$
6 *
7 * This driver was constructed as a student project in the software laboratory 7 * This driver was constructed as a student project in the software laboratory
8 * of the faculty of electrical engineering in the Technion - Israel's 8 * of the faculty of electrical engineering in the Technion - Israel's
9 * Institute Of Technology, with the guide of Avner Lottem and Dr. Ilana David. 9 * Institute Of Technology, with the guide of Avner Lottem and Dr. Ilana David.
10 * 10 *
11 * It is hereby placed under the terms of the GNU general public license. 11 * It is hereby placed under the terms of the GNU general public license.
12 * (See linux/COPYING). 12 * (See linux/COPYING).
13 */
14
15/*
16 * IDE ATAPI streaming tape driver.
17 *
18 * This driver is a part of the Linux ide driver and works in co-operation
19 * with linux/drivers/block/ide.c.
20 *
21 * The driver, in co-operation with ide.c, basically traverses the
22 * request-list for the block device interface. The character device
23 * interface, on the other hand, creates new requests, adds them
24 * to the request-list of the block device, and waits for their completion.
25 *
26 * Pipelined operation mode is now supported on both reads and writes.
27 *
28 * The block device major and minor numbers are determined from the
29 * tape's relative position in the ide interfaces, as explained in ide.c.
30 *
31 * The character device interface consists of the following devices:
32 *
33 * ht0 major 37, minor 0 first IDE tape, rewind on close.
34 * ht1 major 37, minor 1 second IDE tape, rewind on close.
35 * ...
36 * nht0 major 37, minor 128 first IDE tape, no rewind on close.
37 * nht1 major 37, minor 129 second IDE tape, no rewind on close.
38 * ...
39 *
40 * Run linux/scripts/MAKEDEV.ide to create the above entries.
41 *
42 * The general magnetic tape commands compatible interface, as defined by
43 * include/linux/mtio.h, is accessible through the character device.
44 *
45 * General ide driver configuration options, such as the interrupt-unmask
46 * flag, can be configured by issuing an ioctl to the block device interface,
47 * as any other ide device.
48 *
49 * Our own ide-tape ioctl's can be issued to either the block device or
50 * the character device interface.
51 *
52 * Maximal throughput with minimal bus load will usually be achieved in the
53 * following scenario:
54 *
55 * 1. ide-tape is operating in the pipelined operation mode.
56 * 2. No buffering is performed by the user backup program.
57 *
58 * Testing was done with a 2 GB CONNER CTMA 4000 IDE ATAPI Streaming Tape Drive.
59 *
60 * Ver 0.1 Nov 1 95 Pre-working code :-)
61 * Ver 0.2 Nov 23 95 A short backup (few megabytes) and restore procedure
62 * was successful ! (Using tar cvf ... on the block
63 * device interface).
64 * A longer backup resulted in major swapping, bad
65 * overall Linux performance and eventually failed as
66 * we received non serial read-ahead requests from the
67 * buffer cache.
68 * Ver 0.3 Nov 28 95 Long backups are now possible, thanks to the
69 * character device interface. Linux's responsiveness
70 * and performance doesn't seem to be much affected
71 * from the background backup procedure.
72 * Some general mtio.h magnetic tape operations are
73 * now supported by our character device. As a result,
74 * popular tape utilities are starting to work with
75 * ide tapes :-)
76 * The following configurations were tested:
77 * 1. An IDE ATAPI TAPE shares the same interface
78 * and irq with an IDE ATAPI CDROM.
79 * 2. An IDE ATAPI TAPE shares the same interface
80 * and irq with a normal IDE disk.
81 * Both configurations seemed to work just fine !
82 * However, to be on the safe side, it is meanwhile
83 * recommended to give the IDE TAPE its own interface
84 * and irq.
85 * The one thing which needs to be done here is to
86 * add a "request postpone" feature to ide.c,
87 * so that we won't have to wait for the tape to finish
88 * performing a long media access (DSC) request (such
89 * as a rewind) before we can access the other device
90 * on the same interface. This effect doesn't disturb
91 * normal operation most of the time because read/write
92 * requests are relatively fast, and once we are
93 * performing one tape r/w request, a lot of requests
94 * from the other device can be queued and ide.c will
95 * service all of them after this single tape request.
96 * Ver 1.0 Dec 11 95 Integrated into Linux 1.3.46 development tree.
97 * On each read / write request, we now ask the drive
98 * if we can transfer a constant number of bytes
99 * (a parameter of the drive) only to its buffers,
100 * without causing actual media access. If we can't,
101 * we just wait until we can by polling the DSC bit.
102 * This ensures that while we are not transferring
103 * more bytes than the constant referred to above, the
104 * interrupt latency will not become too high and
105 * we won't cause an interrupt timeout, as happened
106 * occasionally in the previous version.
107 * While polling for DSC, the current request is
108 * postponed and ide.c is free to handle requests from
109 * the other device. This is handled transparently to
110 * ide.c. The hwgroup locking method which was used
111 * in the previous version was removed.
112 * Use of new general features which are provided by
113 * ide.c for use with atapi devices.
114 * (Programming done by Mark Lord)
115 * Few potential bug fixes (Again, suggested by Mark)
116 * Single character device data transfers are now
117 * not limited in size, as they were before.
118 * We are asking the tape about its recommended
119 * transfer unit and send a larger data transfer
120 * as several transfers of the above size.
121 * For best results, use an integral number of this
122 * basic unit (which is shown during driver
123 * initialization). I will soon add an ioctl to get
124 * this important parameter.
125 * Our data transfer buffer is allocated on startup,
126 * rather than before each data transfer. This should
127 * ensure that we will indeed have a data buffer.
128 * Ver 1.1 Dec 14 95 Fixed random problems which occurred when the tape
129 * shared an interface with another device.
130 * (poll_for_dsc was a complete mess).
131 * Removed some old (non-active) code which had
132 * to do with supporting buffer cache originated
133 * requests.
134 * The block device interface can now be opened, so
135 * that general ide driver features like the unmask
136 * interrupts flag can be selected with an ioctl.
137 * This is the only use of the block device interface.
138 * New fast pipelined operation mode (currently only on
139 * writes). When using the pipelined mode, the
140 * throughput can potentially reach the maximum
141 * tape supported throughput, regardless of the
142 * user backup program. On my tape drive, it sometimes
143 * boosted performance by a factor of 2. Pipelined
144 * mode is enabled by default, but since it has a few
145 * downfalls as well, you may want to disable it.
146 * A short explanation of the pipelined operation mode
147 * is available below.
148 * Ver 1.2 Jan 1 96 Eliminated pipelined mode race condition.
149 * Added pipeline read mode. As a result, restores
150 * are now as fast as backups.
151 * Optimized shared interface behavior. The new behavior
152 * typically results in better IDE bus efficiency and
153 * higher tape throughput.
154 * Pre-calculation of the expected read/write request
155 * service time, based on the tape's parameters. In
156 * the pipelined operation mode, this allows us to
157 * adjust our polling frequency to a much lower value,
158 * and thus to dramatically reduce our load on Linux,
159 * without any decrease in performance.
160 * Implemented additional mtio.h operations.
161 * The recommended user block size is returned by
162 * the MTIOCGET ioctl.
163 * Additional minor changes.
164 * Ver 1.3 Feb 9 96 Fixed pipelined read mode bug which prevented the
165 * use of some block sizes during a restore procedure.
166 * The character device interface will now present a
167 * continuous view of the media - any mix of block sizes
168 * during a backup/restore procedure is supported. The
169 * driver will buffer the requests internally and
170 * convert them to the tape's recommended transfer
171 * unit, making performance almost independent of the
172 * chosen user block size.
173 * Some improvements in error recovery.
174 * By cooperating with ide-dma.c, bus mastering DMA can
175 * now sometimes be used with IDE tape drives as well.
176 * Bus mastering DMA has the potential to dramatically
177 * reduce the CPU's overhead when accessing the device,
178 * and can be enabled by using hdparm -d1 on the tape's
179 * block device interface. For more info, read the
180 * comments in ide-dma.c.
181 * Ver 1.4 Mar 13 96 Fixed serialize support.
182 * Ver 1.5 Apr 12 96 Fixed shared interface operation, broken in 1.3.85.
183 * Fixed pipelined read mode inefficiency.
184 * Fixed nasty null dereferencing bug.
185 * Ver 1.6 Aug 16 96 Fixed FPU usage in the driver.
186 * Fixed end of media bug.
187 * Ver 1.7 Sep 10 96 Minor changes for the CONNER CTT8000-A model.
188 * Ver 1.8 Sep 26 96 Attempt to find a better balance between good
189 * interactive response and high system throughput.
190 * Ver 1.9 Nov 5 96 Automatically cross encountered filemarks rather
191 * than requiring an explicit FSF command.
192 * Abort pending requests at end of media.
193 * MTTELL was sometimes returning incorrect results.
194 * Return the real block size in the MTIOCGET ioctl.
195 * Some error recovery bug fixes.
196 * Ver 1.10 Nov 5 96 Major reorganization.
197 * Reduced CPU overhead a bit by eliminating internal
198 * bounce buffers.
199 * Added module support.
200 * Added multiple tape drives support.
201 * Added partition support.
202 * Rewrote DSC handling.
203 * Some portability fixes.
204 * Removed ide-tape.h.
205 * Additional minor changes.
206 * Ver 1.11 Dec 2 96 Bug fix in previous DSC timeout handling.
207 * Use ide_stall_queue() for DSC overlap.
208 * Use the maximum speed rather than the current speed
209 * to compute the request service time.
210 * Ver 1.12 Dec 7 97 Fix random memory overwriting and/or last block data
211 * corruption, which could occur if the total number
212 * of bytes written to the tape was not an integral
213 * number of tape blocks.
214 * Add support for INTERRUPT DRQ devices.
215 * Ver 1.13 Jan 2 98 Add "speed == 0" work-around for HP COLORADO 5GB
216 * Ver 1.14 Dec 30 98 Partial fixes for the Sony/AIWA tape drives.
217 * Replace cli()/sti() with hwgroup spinlocks.
218 * Ver 1.15 Mar 25 99 Fix SMP race condition by replacing hwgroup
219 * spinlock with private per-tape spinlock.
220 * Ver 1.16 Sep 1 99 Add OnStream tape support.
221 * Abort read pipeline on EOD.
222 * Wait for the tape to become ready in case it returns
223 * "in the process of becoming ready" on open().
224 * Fix zero padding of the last written block in
225 * case the tape block size is larger than PAGE_SIZE.
226 * Decrease the default disconnection time to tn.
227 * Ver 1.16e Oct 3 99 Minor fixes.
228 * Ver 1.16e1 Oct 13 99 Patches by Arnold Niessen,
229 * niessen@iae.nl / arnold.niessen@philips.com
230 * GO-1) Undefined code in idetape_read_position
231 * according to Gadi's email
232 * AJN-1) Minor fix asc == 11 should be asc == 0x11
233 * in idetape_issue_packet_command (did effect
234 * debugging output only)
235 * AJN-2) Added more debugging output, and
236 * added ide-tape: where missing. I would also
237 * like to add tape->name where possible
238 * AJN-3) Added different debug_level's
239 * via /proc/ide/hdc/settings
240 * "debug_level" determines amount of debugging output;
241 * can be changed using /proc/ide/hdx/settings
242 * 0 : almost no debugging output
243 * 1 : 0+output errors only
244 * 2 : 1+output all sensekey/asc
245 * 3 : 2+follow all chrdev related procedures
246 * 4 : 3+follow all procedures
247 * 5 : 4+include pc_stack rq_stack info
248 * 6 : 5+USE_COUNT updates
249 * AJN-4) Fixed timeout for retension in idetape_queue_pc_tail
250 * from 5 to 10 minutes
251 * AJN-5) Changed maximum number of blocks to skip when
252 * reading tapes with multiple consecutive write
253 * errors from 100 to 1000 in idetape_get_logical_blk
254 * Proposed changes to code:
255 * 1) output "logical_blk_num" via /proc
256 * 2) output "current_operation" via /proc
257 * 3) Either solve or document the fact that `mt rewind' is
258 * required after reading from /dev/nhtx to be
259 * able to rmmod the idetape module;
260 * Also, sometimes an application finishes but the
261 * device remains `busy' for some time. Same cause ?
262 * Proposed changes to release-notes:
263 * 4) write a simple `quickstart' section in the
264 * release notes; I volunteer if you don't want to
265 * 5) include a pointer to video4linux in the doc
266 * to stimulate video applications
267 * 6) release notes lines 331 and 362: explain what happens
268 * if the application data rate is higher than 1100 KB/s;
269 * similar approach to lower-than-500 kB/s ?
270 * 7) 6.6 Comparison; wouldn't it be better to allow different
271 * strategies for read and write ?
272 * Wouldn't it be better to control the tape buffer
273 * contents instead of the bandwidth ?
274 * 8) line 536: replace will by would (if I understand
275 * this section correctly, a hypothetical and unwanted situation
276 * is being described)
277 * Ver 1.16f Dec 15 99 Change place of the secondary OnStream header frames.
278 * Ver 1.17 Nov 2000 / Jan 2001 Marcel Mol, marcel@mesa.nl
279 * - Add idetape_onstream_mode_sense_tape_parameter_page
280 * function to get tape capacity in frames: tape->capacity.
281 * - Add support for DI-50 drives( or any DI- drive).
282 * - 'workaround' for read error/blank block around block 3000.
283 * - Implement Early warning for end of media for Onstream.
284 * - Cosmetic code changes for readability.
285 * - Idetape_position_tape should not use SKIP bit during
286 * Onstream read recovery.
287 * - Add capacity, logical_blk_num and first/last_frame_position
288 * to /proc/ide/hd?/settings.
289 * - Module use count was gone in the Linux 2.4 driver.
290 * Ver 1.17a Apr 2001 Willem Riede osst@riede.org
291 * - Get drive's actual block size from mode sense block descriptor
292 * - Limit size of pipeline
293 * Ver 1.17b Oct 2002 Alan Stern <stern@rowland.harvard.edu>
294 * Changed IDETAPE_MIN_PIPELINE_STAGES to 1 and actually used
295 * it in the code!
296 * Actually removed aborted stages in idetape_abort_pipeline
297 * instead of just changing the command code.
298 * Made the transfer byte count for Request Sense equal to the
299 * actual length of the data transfer.
300 * Changed handling of partial data transfers: they do not
301 * cause DMA errors.
302 * Moved initiation of DMA transfers to the correct place.
303 * Removed reference to unallocated memory.
304 * Made __idetape_discard_read_pipeline return the number of
305 * sectors skipped, not the number of stages.
306 * Replaced errant kfree() calls with __idetape_kfree_stage().
307 * Fixed off-by-one error in testing the pipeline length.
308 * Fixed handling of filemarks in the read pipeline.
309 * Small code optimization for MTBSF and MTBSFM ioctls.
310 * Don't try to unlock the door during device close if is
311 * already unlocked!
312 * Cosmetic fixes to miscellaneous debugging output messages.
313 * Set the minimum /proc/ide/hd?/settings values for "pipeline",
314 * "pipeline_min", and "pipeline_max" to 1.
315 *
316 * Here are some words from the first releases of hd.c, which are quoted
317 * in ide.c and apply here as well:
318 *
319 * | Special care is recommended. Have Fun!
320 * 13 *
321 */ 14 * For a historical changelog see
322 15 * Documentation/ide/ChangeLog.ide-tape.1995-2002
323/*
324 * An overview of the pipelined operation mode.
325 *
326 * In the pipelined write mode, we will usually just add requests to our
327 * pipeline and return immediately, before we even start to service them. The
328 * user program will then have enough time to prepare the next request while
329 * we are still busy servicing previous requests. In the pipelined read mode,
330 * the situation is similar - we add read-ahead requests into the pipeline,
331 * before the user even requested them.
332 *
333 * The pipeline can be viewed as a "safety net" which will be activated when
334 * the system load is high and prevents the user backup program from keeping up
335 * with the current tape speed. At this point, the pipeline will get
336 * shorter and shorter but the tape will still be streaming at the same speed.
337 * Assuming we have enough pipeline stages, the system load will hopefully
338 * decrease before the pipeline is completely empty, and the backup program
339 * will be able to "catch up" and refill the pipeline again.
340 *
341 * When using the pipelined mode, it would be best to disable any type of
342 * buffering done by the user program, as ide-tape already provides all the
343 * benefits in the kernel, where it can be done in a more efficient way.
344 * As we will usually not block the user program on a request, the most
345 * efficient user code will then be a simple read-write-read-... cycle.
346 * Any additional logic will usually just slow down the backup process.
347 *
348 * Using the pipelined mode, I get a constant over 400 KBps throughput,
349 * which seems to be the maximum throughput supported by my tape.
350 *
351 * However, there are some downfalls:
352 *
353 * 1. We use memory (for data buffers) in proportional to the number
354 * of pipeline stages (each stage is about 26 KB with my tape).
355 * 2. In the pipelined write mode, we cheat and postpone error codes
356 * to the user task. In read mode, the actual tape position
357 * will be a bit further than the last requested block.
358 *
359 * Concerning (1):
360 *
361 * 1. We allocate stages dynamically only when we need them. When
362 * we don't need them, we don't consume additional memory. In
363 * case we can't allocate stages, we just manage without them
364 * (at the expense of decreased throughput) so when Linux is
365 * tight in memory, we will not pose additional difficulties.
366 *
367 * 2. The maximum number of stages (which is, in fact, the maximum
368 * amount of memory) which we allocate is limited by the compile
369 * time parameter IDETAPE_MAX_PIPELINE_STAGES.
370 *
371 * 3. The maximum number of stages is a controlled parameter - We
372 * don't start from the user defined maximum number of stages
373 * but from the lower IDETAPE_MIN_PIPELINE_STAGES (again, we
374 * will not even allocate this amount of stages if the user
375 * program can't handle the speed). We then implement a feedback
376 * loop which checks if the pipeline is empty, and if it is, we
377 * increase the maximum number of stages as necessary until we
378 * reach the optimum value which just manages to keep the tape
379 * busy with minimum allocated memory or until we reach
380 * IDETAPE_MAX_PIPELINE_STAGES.
381 *
382 * Concerning (2):
383 *
384 * In pipelined write mode, ide-tape can not return accurate error codes
385 * to the user program since we usually just add the request to the
386 * pipeline without waiting for it to be serviced. In case an error
387 * occurs, I will report it on the next user request.
388 *
389 * In the pipelined read mode, subsequent read requests or forward
390 * filemark spacing will perform correctly, as we preserve all blocks
391 * and filemarks which we encountered during our excess read-ahead.
392 *
393 * For accurate tape positioning and error reporting, disabling
394 * pipelined mode might be the best option.
395 *
396 * You can enable/disable/tune the pipelined operation mode by adjusting
397 * the compile time parameters below.
398 */
399
400/*
401 * Possible improvements.
402 *
403 * 1. Support for the ATAPI overlap protocol.
404 *
405 * In order to maximize bus throughput, we currently use the DSC
406 * overlap method which enables ide.c to service requests from the
407 * other device while the tape is busy executing a command. The
408 * DSC overlap method involves polling the tape's status register
409 * for the DSC bit, and servicing the other device while the tape
410 * isn't ready.
411 *
412 * In the current QIC development standard (December 1995),
413 * it is recommended that new tape drives will *in addition*
414 * implement the ATAPI overlap protocol, which is used for the
415 * same purpose - efficient use of the IDE bus, but is interrupt
416 * driven and thus has much less CPU overhead.
417 *
418 * ATAPI overlap is likely to be supported in most new ATAPI
419 * devices, including new ATAPI cdroms, and thus provides us
420 * a method by which we can achieve higher throughput when
421 * sharing a (fast) ATA-2 disk with any (slow) new ATAPI device.
422 */ 16 */
423 17
424#define IDETAPE_VERSION "1.19" 18#define IDETAPE_VERSION "1.19"
@@ -442,49 +36,13 @@
442#include <linux/completion.h> 36#include <linux/completion.h>
443#include <linux/bitops.h> 37#include <linux/bitops.h>
444#include <linux/mutex.h> 38#include <linux/mutex.h>
39#include <scsi/scsi.h>
445 40
446#include <asm/byteorder.h> 41#include <asm/byteorder.h>
447#include <asm/irq.h> 42#include <asm/irq.h>
448#include <asm/uaccess.h> 43#include <asm/uaccess.h>
449#include <asm/io.h> 44#include <asm/io.h>
450#include <asm/unaligned.h> 45#include <asm/unaligned.h>
451
452/*
453 * partition
454 */
455typedef struct os_partition_s {
456 __u8 partition_num;
457 __u8 par_desc_ver;
458 __u16 wrt_pass_cntr;
459 __u32 first_frame_addr;
460 __u32 last_frame_addr;
461 __u32 eod_frame_addr;
462} os_partition_t;
463
464/*
465 * DAT entry
466 */
467typedef struct os_dat_entry_s {
468 __u32 blk_sz;
469 __u16 blk_cnt;
470 __u8 flags;
471 __u8 reserved;
472} os_dat_entry_t;
473
474/*
475 * DAT
476 */
477#define OS_DAT_FLAGS_DATA (0xc)
478#define OS_DAT_FLAGS_MARK (0x1)
479
480typedef struct os_dat_s {
481 __u8 dat_sz;
482 __u8 reserved1;
483 __u8 entry_cnt;
484 __u8 reserved3;
485 os_dat_entry_t dat_list[16];
486} os_dat_t;
487
488#include <linux/mtio.h> 46#include <linux/mtio.h>
489 47
490/**************************** Tunable parameters *****************************/ 48/**************************** Tunable parameters *****************************/
@@ -512,10 +70,7 @@ typedef struct os_dat_s {
512/* 70/*
513 * The following are used to debug the driver: 71 * The following are used to debug the driver:
514 * 72 *
515 * Setting IDETAPE_DEBUG_INFO to 1 will report device capabilities.
516 * Setting IDETAPE_DEBUG_LOG to 1 will log driver flow control. 73 * Setting IDETAPE_DEBUG_LOG to 1 will log driver flow control.
517 * Setting IDETAPE_DEBUG_BUGS to 1 will enable self-sanity checks in
518 * some places.
519 * 74 *
520 * Setting them to 0 will restore normal operation mode: 75 * Setting them to 0 will restore normal operation mode:
521 * 76 *
@@ -527,9 +82,7 @@ typedef struct os_dat_s {
527 * is verified to be stable enough. This will make it much more 82 * is verified to be stable enough. This will make it much more
528 * esthetic. 83 * esthetic.
529 */ 84 */
530#define IDETAPE_DEBUG_INFO 0
531#define IDETAPE_DEBUG_LOG 0 85#define IDETAPE_DEBUG_LOG 0
532#define IDETAPE_DEBUG_BUGS 1
533 86
534/* 87/*
535 * After each failed packet command we issue a request sense command 88 * After each failed packet command we issue a request sense command
@@ -671,65 +224,6 @@ typedef struct idetape_packet_command_s {
671#define PC_WRITING 5 224#define PC_WRITING 5
672 225
673/* 226/*
674 * Capabilities and Mechanical Status Page
675 */
676typedef struct {
677 unsigned page_code :6; /* Page code - Should be 0x2a */
678 __u8 reserved0_6 :1;
679 __u8 ps :1; /* parameters saveable */
680 __u8 page_length; /* Page Length - Should be 0x12 */
681 __u8 reserved2, reserved3;
682 unsigned ro :1; /* Read Only Mode */
683 unsigned reserved4_1234 :4;
684 unsigned sprev :1; /* Supports SPACE in the reverse direction */
685 unsigned reserved4_67 :2;
686 unsigned reserved5_012 :3;
687 unsigned efmt :1; /* Supports ERASE command initiated formatting */
688 unsigned reserved5_4 :1;
689 unsigned qfa :1; /* Supports the QFA two partition formats */
690 unsigned reserved5_67 :2;
691 unsigned lock :1; /* Supports locking the volume */
692 unsigned locked :1; /* The volume is locked */
693 unsigned prevent :1; /* The device defaults in the prevent state after power up */
694 unsigned eject :1; /* The device can eject the volume */
695 __u8 disconnect :1; /* The device can break request > ctl */
696 __u8 reserved6_5 :1;
697 unsigned ecc :1; /* Supports error correction */
698 unsigned cmprs :1; /* Supports data compression */
699 unsigned reserved7_0 :1;
700 unsigned blk512 :1; /* Supports 512 bytes block size */
701 unsigned blk1024 :1; /* Supports 1024 bytes block size */
702 unsigned reserved7_3_6 :4;
703 unsigned blk32768 :1; /* slowb - the device restricts the byte count for PIO */
704 /* transfers for slow buffer memory ??? */
705 /* Also 32768 block size in some cases */
706 __u16 max_speed; /* Maximum speed supported in KBps */
707 __u8 reserved10, reserved11;
708 __u16 ctl; /* Continuous Transfer Limit in blocks */
709 __u16 speed; /* Current Speed, in KBps */
710 __u16 buffer_size; /* Buffer Size, in 512 bytes */
711 __u8 reserved18, reserved19;
712} idetape_capabilities_page_t;
713
714/*
715 * Block Size Page
716 */
717typedef struct {
718 unsigned page_code :6; /* Page code - Should be 0x30 */
719 unsigned reserved1_6 :1;
720 unsigned ps :1;
721 __u8 page_length; /* Page Length - Should be 2 */
722 __u8 reserved2;
723 unsigned play32 :1;
724 unsigned play32_5 :1;
725 unsigned reserved2_23 :2;
726 unsigned record32 :1;
727 unsigned record32_5 :1;
728 unsigned reserved2_6 :1;
729 unsigned one :1;
730} idetape_block_size_page_t;
731
732/*
733 * A pipeline stage. 227 * A pipeline stage.
734 */ 228 */
735typedef struct idetape_stage_s { 229typedef struct idetape_stage_s {
@@ -739,32 +233,6 @@ typedef struct idetape_stage_s {
739} idetape_stage_t; 233} idetape_stage_t;
740 234
741/* 235/*
742 * REQUEST SENSE packet command result - Data Format.
743 */
744typedef struct {
745 unsigned error_code :7; /* Current of deferred errors */
746 unsigned valid :1; /* The information field conforms to QIC-157C */
747 __u8 reserved1 :8; /* Segment Number - Reserved */
748 unsigned sense_key :4; /* Sense Key */
749 unsigned reserved2_4 :1; /* Reserved */
750 unsigned ili :1; /* Incorrect Length Indicator */
751 unsigned eom :1; /* End Of Medium */
752 unsigned filemark :1; /* Filemark */
753 __u32 information __attribute__ ((packed));
754 __u8 asl; /* Additional sense length (n-7) */
755 __u32 command_specific; /* Additional command specific information */
756 __u8 asc; /* Additional Sense Code */
757 __u8 ascq; /* Additional Sense Code Qualifier */
758 __u8 replaceable_unit_code; /* Field Replaceable Unit Code */
759 unsigned sk_specific1 :7; /* Sense Key Specific */
760 unsigned sksv :1; /* Sense Key Specific information is valid */
761 __u8 sk_specific2; /* Sense Key Specific */
762 __u8 sk_specific3; /* Sense Key Specific */
763 __u8 pad[2]; /* Padding to 20 bytes */
764} idetape_request_sense_result_t;
765
766
767/*
768 * Most of our global data which we need to save even as we leave the 236 * Most of our global data which we need to save even as we leave the
769 * driver due to an interrupt or a timer event is stored in a variable 237 * driver due to an interrupt or a timer event is stored in a variable
770 * of type idetape_tape_t, defined below. 238 * of type idetape_tape_t, defined below.
@@ -854,8 +322,9 @@ typedef struct ide_tape_obj {
854 /* Usually 512 or 1024 bytes */ 322 /* Usually 512 or 1024 bytes */
855 unsigned short tape_block_size; 323 unsigned short tape_block_size;
856 int user_bs_factor; 324 int user_bs_factor;
325
857 /* Copy of the tape's Capabilities and Mechanical Page */ 326 /* Copy of the tape's Capabilities and Mechanical Page */
858 idetape_capabilities_page_t capabilities; 327 u8 caps[20];
859 328
860 /* 329 /*
861 * Active data transfer request parameters. 330 * Active data transfer request parameters.
@@ -918,9 +387,6 @@ typedef struct ide_tape_obj {
918 int avg_size; 387 int avg_size;
919 int avg_speed; 388 int avg_speed;
920 389
921 /* last sense information */
922 idetape_request_sense_result_t sense;
923
924 char vendor_id[10]; 390 char vendor_id[10];
925 char product_id[18]; 391 char product_id[18];
926 char firmware_revision[6]; 392 char firmware_revision[6];
@@ -1052,27 +518,6 @@ static void ide_tape_put(struct ide_tape_obj *tape)
1052#define IDETAPE_MEDIUM_PRESENT 9 518#define IDETAPE_MEDIUM_PRESENT 9
1053 519
1054/* 520/*
1055 * Supported ATAPI tape drives packet commands
1056 */
1057#define IDETAPE_TEST_UNIT_READY_CMD 0x00
1058#define IDETAPE_REWIND_CMD 0x01
1059#define IDETAPE_REQUEST_SENSE_CMD 0x03
1060#define IDETAPE_READ_CMD 0x08
1061#define IDETAPE_WRITE_CMD 0x0a
1062#define IDETAPE_WRITE_FILEMARK_CMD 0x10
1063#define IDETAPE_SPACE_CMD 0x11
1064#define IDETAPE_INQUIRY_CMD 0x12
1065#define IDETAPE_ERASE_CMD 0x19
1066#define IDETAPE_MODE_SENSE_CMD 0x1a
1067#define IDETAPE_MODE_SELECT_CMD 0x15
1068#define IDETAPE_LOAD_UNLOAD_CMD 0x1b
1069#define IDETAPE_PREVENT_CMD 0x1e
1070#define IDETAPE_LOCATE_CMD 0x2b
1071#define IDETAPE_READ_POSITION_CMD 0x34
1072#define IDETAPE_READ_BUFFER_CMD 0x3c
1073#define IDETAPE_SET_SPEED_CMD 0xbb
1074
1075/*
1076 * Some defines for the READ BUFFER command 521 * Some defines for the READ BUFFER command
1077 */ 522 */
1078#define IDETAPE_RETRIEVE_FAULTY_BLOCK 6 523#define IDETAPE_RETRIEVE_FAULTY_BLOCK 6
@@ -1129,31 +574,6 @@ struct idetape_id_gcw {
1129}; 574};
1130 575
1131/* 576/*
1132 * INQUIRY packet command - Data Format (From Table 6-8 of QIC-157C)
1133 */
1134typedef struct {
1135 unsigned device_type :5; /* Peripheral Device Type */
1136 unsigned reserved0_765 :3; /* Peripheral Qualifier - Reserved */
1137 unsigned reserved1_6t0 :7; /* Reserved */
1138 unsigned rmb :1; /* Removable Medium Bit */
1139 unsigned ansi_version :3; /* ANSI Version */
1140 unsigned ecma_version :3; /* ECMA Version */
1141 unsigned iso_version :2; /* ISO Version */
1142 unsigned response_format :4; /* Response Data Format */
1143 unsigned reserved3_45 :2; /* Reserved */
1144 unsigned reserved3_6 :1; /* TrmIOP - Reserved */
1145 unsigned reserved3_7 :1; /* AENC - Reserved */
1146 __u8 additional_length; /* Additional Length (total_length-4) */
1147 __u8 rsv5, rsv6, rsv7; /* Reserved */
1148 __u8 vendor_id[8]; /* Vendor Identification */
1149 __u8 product_id[16]; /* Product Identification */
1150 __u8 revision_level[4]; /* Revision Level */
1151 __u8 vendor_specific[20]; /* Vendor Specific - Optional */
1152 __u8 reserved56t95[40]; /* Reserved - Optional */
1153 /* Additional information may be returned */
1154} idetape_inquiry_result_t;
1155
1156/*
1157 * READ POSITION packet command - Data Format (From Table 6-57) 577 * READ POSITION packet command - Data Format (From Table 6-57)
1158 */ 578 */
1159typedef struct { 579typedef struct {
@@ -1171,100 +591,9 @@ typedef struct {
1171 u32 bytes_in_buffer; /* Bytes In Buffer (Optional) */ 591 u32 bytes_in_buffer; /* Bytes In Buffer (Optional) */
1172} idetape_read_position_result_t; 592} idetape_read_position_result_t;
1173 593
1174/* 594/* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
1175 * Follows structures which are related to the SELECT SENSE / MODE SENSE
1176 * packet commands. Those packet commands are still not supported
1177 * by ide-tape.
1178 */
1179#define IDETAPE_BLOCK_DESCRIPTOR 0 595#define IDETAPE_BLOCK_DESCRIPTOR 0
1180#define IDETAPE_CAPABILITIES_PAGE 0x2a 596#define IDETAPE_CAPABILITIES_PAGE 0x2a
1181#define IDETAPE_PARAMTR_PAGE 0x2b /* Onstream DI-x0 only */
1182#define IDETAPE_BLOCK_SIZE_PAGE 0x30
1183#define IDETAPE_BUFFER_FILLING_PAGE 0x33
1184
1185/*
1186 * Mode Parameter Header for the MODE SENSE packet command
1187 */
1188typedef struct {
1189 __u8 mode_data_length; /* Length of the following data transfer */
1190 __u8 medium_type; /* Medium Type */
1191 __u8 dsp; /* Device Specific Parameter */
1192 __u8 bdl; /* Block Descriptor Length */
1193#if 0
1194 /* data transfer page */
1195 __u8 page_code :6;
1196 __u8 reserved0_6 :1;
1197 __u8 ps :1; /* parameters saveable */
1198 __u8 page_length; /* page Length == 0x02 */
1199 __u8 reserved2;
1200 __u8 read32k :1; /* 32k blk size (data only) */
1201 __u8 read32k5 :1; /* 32.5k blk size (data&AUX) */
1202 __u8 reserved3_23 :2;
1203 __u8 write32k :1; /* 32k blk size (data only) */
1204 __u8 write32k5 :1; /* 32.5k blk size (data&AUX) */
1205 __u8 reserved3_6 :1;
1206 __u8 streaming :1; /* streaming mode enable */
1207#endif
1208} idetape_mode_parameter_header_t;
1209
1210/*
1211 * Mode Parameter Block Descriptor the MODE SENSE packet command
1212 *
1213 * Support for block descriptors is optional.
1214 */
1215typedef struct {
1216 __u8 density_code; /* Medium density code */
1217 __u8 blocks[3]; /* Number of blocks */
1218 __u8 reserved4; /* Reserved */
1219 __u8 length[3]; /* Block Length */
1220} idetape_parameter_block_descriptor_t;
1221
1222/*
1223 * The Data Compression Page, as returned by the MODE SENSE packet command.
1224 */
1225typedef struct {
1226 unsigned page_code :6; /* Page Code - Should be 0xf */
1227 unsigned reserved0 :1; /* Reserved */
1228 unsigned ps :1;
1229 __u8 page_length; /* Page Length - Should be 14 */
1230 unsigned reserved2 :6; /* Reserved */
1231 unsigned dcc :1; /* Data Compression Capable */
1232 unsigned dce :1; /* Data Compression Enable */
1233 unsigned reserved3 :5; /* Reserved */
1234 unsigned red :2; /* Report Exception on Decompression */
1235 unsigned dde :1; /* Data Decompression Enable */
1236 __u32 ca; /* Compression Algorithm */
1237 __u32 da; /* Decompression Algorithm */
1238 __u8 reserved[4]; /* Reserved */
1239} idetape_data_compression_page_t;
1240
1241/*
1242 * The Medium Partition Page, as returned by the MODE SENSE packet command.
1243 */
1244typedef struct {
1245 unsigned page_code :6; /* Page Code - Should be 0x11 */
1246 unsigned reserved1_6 :1; /* Reserved */
1247 unsigned ps :1;
1248 __u8 page_length; /* Page Length - Should be 6 */
1249 __u8 map; /* Maximum Additional Partitions - Should be 0 */
1250 __u8 apd; /* Additional Partitions Defined - Should be 0 */
1251 unsigned reserved4_012 :3; /* Reserved */
1252 unsigned psum :2; /* Should be 0 */
1253 unsigned idp :1; /* Should be 0 */
1254 unsigned sdp :1; /* Should be 0 */
1255 unsigned fdp :1; /* Fixed Data Partitions */
1256 __u8 mfr; /* Medium Format Recognition */
1257 __u8 reserved[2]; /* Reserved */
1258} idetape_medium_partition_page_t;
1259
1260/*
1261 * Run time configurable parameters.
1262 */
1263typedef struct {
1264 int dsc_rw_frequency;
1265 int dsc_media_access_frequency;
1266 int nr_stages;
1267} idetape_config_t;
1268 597
1269/* 598/*
1270 * The variables below are used for the character device interface. 599 * The variables below are used for the character device interface.
@@ -1309,14 +638,12 @@ static void idetape_input_buffers (ide_drive_t *drive, idetape_pc_t *pc, unsigne
1309 int count; 638 int count;
1310 639
1311 while (bcount) { 640 while (bcount) {
1312#if IDETAPE_DEBUG_BUGS
1313 if (bh == NULL) { 641 if (bh == NULL) {
1314 printk(KERN_ERR "ide-tape: bh == NULL in " 642 printk(KERN_ERR "ide-tape: bh == NULL in "
1315 "idetape_input_buffers\n"); 643 "idetape_input_buffers\n");
1316 idetape_discard_data(drive, bcount); 644 idetape_discard_data(drive, bcount);
1317 return; 645 return;
1318 } 646 }
1319#endif /* IDETAPE_DEBUG_BUGS */
1320 count = min((unsigned int)(bh->b_size - atomic_read(&bh->b_count)), bcount); 647 count = min((unsigned int)(bh->b_size - atomic_read(&bh->b_count)), bcount);
1321 HWIF(drive)->atapi_input_bytes(drive, bh->b_data + atomic_read(&bh->b_count), count); 648 HWIF(drive)->atapi_input_bytes(drive, bh->b_data + atomic_read(&bh->b_count), count);
1322 bcount -= count; 649 bcount -= count;
@@ -1336,13 +663,11 @@ static void idetape_output_buffers (ide_drive_t *drive, idetape_pc_t *pc, unsign
1336 int count; 663 int count;
1337 664
1338 while (bcount) { 665 while (bcount) {
1339#if IDETAPE_DEBUG_BUGS
1340 if (bh == NULL) { 666 if (bh == NULL) {
1341 printk(KERN_ERR "ide-tape: bh == NULL in " 667 printk(KERN_ERR "ide-tape: bh == NULL in "
1342 "idetape_output_buffers\n"); 668 "idetape_output_buffers\n");
1343 return; 669 return;
1344 } 670 }
1345#endif /* IDETAPE_DEBUG_BUGS */
1346 count = min((unsigned int)pc->b_count, (unsigned int)bcount); 671 count = min((unsigned int)pc->b_count, (unsigned int)bcount);
1347 HWIF(drive)->atapi_output_bytes(drive, pc->b_data, count); 672 HWIF(drive)->atapi_output_bytes(drive, pc->b_data, count);
1348 bcount -= count; 673 bcount -= count;
@@ -1367,13 +692,11 @@ static void idetape_update_buffers (idetape_pc_t *pc)
1367 if (test_bit(PC_WRITING, &pc->flags)) 692 if (test_bit(PC_WRITING, &pc->flags))
1368 return; 693 return;
1369 while (bcount) { 694 while (bcount) {
1370#if IDETAPE_DEBUG_BUGS
1371 if (bh == NULL) { 695 if (bh == NULL) {
1372 printk(KERN_ERR "ide-tape: bh == NULL in " 696 printk(KERN_ERR "ide-tape: bh == NULL in "
1373 "idetape_update_buffers\n"); 697 "idetape_update_buffers\n");
1374 return; 698 return;
1375 } 699 }
1376#endif /* IDETAPE_DEBUG_BUGS */
1377 count = min((unsigned int)bh->b_size, (unsigned int)bcount); 700 count = min((unsigned int)bh->b_size, (unsigned int)bcount);
1378 atomic_set(&bh->b_count, count); 701 atomic_set(&bh->b_count, count);
1379 if (atomic_read(&bh->b_count) == bh->b_size) 702 if (atomic_read(&bh->b_count) == bh->b_size)
@@ -1446,36 +769,34 @@ static void idetape_init_pc (idetape_pc_t *pc)
1446} 769}
1447 770
1448/* 771/*
1449 * idetape_analyze_error is called on each failed packet command retry 772 * called on each failed packet command retry to analyze the request sense. We
1450 * to analyze the request sense. We currently do not utilize this 773 * currently do not utilize this information.
1451 * information.
1452 */ 774 */
1453static void idetape_analyze_error (ide_drive_t *drive, idetape_request_sense_result_t *result) 775static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
1454{ 776{
1455 idetape_tape_t *tape = drive->driver_data; 777 idetape_tape_t *tape = drive->driver_data;
1456 idetape_pc_t *pc = tape->failed_pc; 778 idetape_pc_t *pc = tape->failed_pc;
1457 779
1458 tape->sense = *result; 780 tape->sense_key = sense[2] & 0xF;
1459 tape->sense_key = result->sense_key; 781 tape->asc = sense[12];
1460 tape->asc = result->asc; 782 tape->ascq = sense[13];
1461 tape->ascq = result->ascq;
1462#if IDETAPE_DEBUG_LOG 783#if IDETAPE_DEBUG_LOG
1463 /* 784 /*
1464 * Without debugging, we only log an error if we decided to 785 * Without debugging, we only log an error if we decided to give up
1465 * give up retrying. 786 * retrying.
1466 */ 787 */
1467 if (tape->debug_level >= 1) 788 if (tape->debug_level >= 1)
1468 printk(KERN_INFO "ide-tape: pc = %x, sense key = %x, " 789 printk(KERN_INFO "ide-tape: pc = %x, sense key = %x, "
1469 "asc = %x, ascq = %x\n", 790 "asc = %x, ascq = %x\n",
1470 pc->c[0], result->sense_key, 791 pc->c[0], tape->sense_key,
1471 result->asc, result->ascq); 792 tape->asc, tape->ascq);
1472#endif /* IDETAPE_DEBUG_LOG */ 793#endif /* IDETAPE_DEBUG_LOG */
1473 794
1474 /* 795 /* Correct pc->actually_transferred by asking the tape. */
1475 * Correct pc->actually_transferred by asking the tape.
1476 */
1477 if (test_bit(PC_DMA_ERROR, &pc->flags)) { 796 if (test_bit(PC_DMA_ERROR, &pc->flags)) {
1478 pc->actually_transferred = pc->request_transfer - tape->tape_block_size * ntohl(get_unaligned(&result->information)); 797 pc->actually_transferred = pc->request_transfer -
798 tape->tape_block_size *
799 be32_to_cpu(get_unaligned((u32 *)&sense[3]));
1479 idetape_update_buffers(pc); 800 idetape_update_buffers(pc);
1480 } 801 }
1481 802
@@ -1484,29 +805,29 @@ static void idetape_analyze_error (ide_drive_t *drive, idetape_request_sense_res
1484 * with sense key=5, asc=0x22, ascq=0, let it slide. Some drives 805 * with sense key=5, asc=0x22, ascq=0, let it slide. Some drives
1485 * (i.e. Seagate STT3401A Travan) don't support 0-length read/writes. 806 * (i.e. Seagate STT3401A Travan) don't support 0-length read/writes.
1486 */ 807 */
1487 if ((pc->c[0] == IDETAPE_READ_CMD || pc->c[0] == IDETAPE_WRITE_CMD) 808 if ((pc->c[0] == READ_6 || pc->c[0] == WRITE_6)
1488 && pc->c[4] == 0 && pc->c[3] == 0 && pc->c[2] == 0) { /* length==0 */ 809 /* length == 0 */
1489 if (result->sense_key == 5) { 810 && pc->c[4] == 0 && pc->c[3] == 0 && pc->c[2] == 0) {
811 if (tape->sense_key == 5) {
1490 /* don't report an error, everything's ok */ 812 /* don't report an error, everything's ok */
1491 pc->error = 0; 813 pc->error = 0;
1492 /* don't retry read/write */ 814 /* don't retry read/write */
1493 set_bit(PC_ABORT, &pc->flags); 815 set_bit(PC_ABORT, &pc->flags);
1494 } 816 }
1495 } 817 }
1496 if (pc->c[0] == IDETAPE_READ_CMD && result->filemark) { 818 if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
1497 pc->error = IDETAPE_ERROR_FILEMARK; 819 pc->error = IDETAPE_ERROR_FILEMARK;
1498 set_bit(PC_ABORT, &pc->flags); 820 set_bit(PC_ABORT, &pc->flags);
1499 } 821 }
1500 if (pc->c[0] == IDETAPE_WRITE_CMD) { 822 if (pc->c[0] == WRITE_6) {
1501 if (result->eom || 823 if ((sense[2] & 0x40) || (tape->sense_key == 0xd
1502 (result->sense_key == 0xd && result->asc == 0x0 && 824 && tape->asc == 0x0 && tape->ascq == 0x2)) {
1503 result->ascq == 0x2)) {
1504 pc->error = IDETAPE_ERROR_EOD; 825 pc->error = IDETAPE_ERROR_EOD;
1505 set_bit(PC_ABORT, &pc->flags); 826 set_bit(PC_ABORT, &pc->flags);
1506 } 827 }
1507 } 828 }
1508 if (pc->c[0] == IDETAPE_READ_CMD || pc->c[0] == IDETAPE_WRITE_CMD) { 829 if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
1509 if (result->sense_key == 8) { 830 if (tape->sense_key == 8) {
1510 pc->error = IDETAPE_ERROR_EOD; 831 pc->error = IDETAPE_ERROR_EOD;
1511 set_bit(PC_ABORT, &pc->flags); 832 set_bit(PC_ABORT, &pc->flags);
1512 } 833 }
@@ -1516,10 +837,7 @@ static void idetape_analyze_error (ide_drive_t *drive, idetape_request_sense_res
1516 } 837 }
1517} 838}
1518 839
1519/* 840static void idetape_activate_next_stage(ide_drive_t *drive)
1520 * idetape_active_next_stage will declare the next stage as "active".
1521 */
1522static void idetape_active_next_stage (ide_drive_t *drive)
1523{ 841{
1524 idetape_tape_t *tape = drive->driver_data; 842 idetape_tape_t *tape = drive->driver_data;
1525 idetape_stage_t *stage = tape->next_stage; 843 idetape_stage_t *stage = tape->next_stage;
@@ -1529,12 +847,10 @@ static void idetape_active_next_stage (ide_drive_t *drive)
1529 if (tape->debug_level >= 4) 847 if (tape->debug_level >= 4)
1530 printk(KERN_INFO "ide-tape: Reached idetape_active_next_stage\n"); 848 printk(KERN_INFO "ide-tape: Reached idetape_active_next_stage\n");
1531#endif /* IDETAPE_DEBUG_LOG */ 849#endif /* IDETAPE_DEBUG_LOG */
1532#if IDETAPE_DEBUG_BUGS
1533 if (stage == NULL) { 850 if (stage == NULL) {
1534 printk(KERN_ERR "ide-tape: bug: Trying to activate a non existing stage\n"); 851 printk(KERN_ERR "ide-tape: bug: Trying to activate a non existing stage\n");
1535 return; 852 return;
1536 } 853 }
1537#endif /* IDETAPE_DEBUG_BUGS */
1538 854
1539 rq->rq_disk = tape->disk; 855 rq->rq_disk = tape->disk;
1540 rq->buffer = NULL; 856 rq->buffer = NULL;
@@ -1609,28 +925,24 @@ static void idetape_remove_stage_head (ide_drive_t *drive)
1609 if (tape->debug_level >= 4) 925 if (tape->debug_level >= 4)
1610 printk(KERN_INFO "ide-tape: Reached idetape_remove_stage_head\n"); 926 printk(KERN_INFO "ide-tape: Reached idetape_remove_stage_head\n");
1611#endif /* IDETAPE_DEBUG_LOG */ 927#endif /* IDETAPE_DEBUG_LOG */
1612#if IDETAPE_DEBUG_BUGS
1613 if (tape->first_stage == NULL) { 928 if (tape->first_stage == NULL) {
1614 printk(KERN_ERR "ide-tape: bug: tape->first_stage is NULL\n"); 929 printk(KERN_ERR "ide-tape: bug: tape->first_stage is NULL\n");
1615 return; 930 return;
1616 } 931 }
1617 if (tape->active_stage == tape->first_stage) { 932 if (tape->active_stage == tape->first_stage) {
1618 printk(KERN_ERR "ide-tape: bug: Trying to free our active pipeline stage\n"); 933 printk(KERN_ERR "ide-tape: bug: Trying to free our active pipeline stage\n");
1619 return; 934 return;
1620 } 935 }
1621#endif /* IDETAPE_DEBUG_BUGS */
1622 stage = tape->first_stage; 936 stage = tape->first_stage;
1623 tape->first_stage = stage->next; 937 tape->first_stage = stage->next;
1624 idetape_kfree_stage(tape, stage); 938 idetape_kfree_stage(tape, stage);
1625 tape->nr_stages--; 939 tape->nr_stages--;
1626 if (tape->first_stage == NULL) { 940 if (tape->first_stage == NULL) {
1627 tape->last_stage = NULL; 941 tape->last_stage = NULL;
1628#if IDETAPE_DEBUG_BUGS
1629 if (tape->next_stage != NULL) 942 if (tape->next_stage != NULL)
1630 printk(KERN_ERR "ide-tape: bug: tape->next_stage != NULL\n"); 943 printk(KERN_ERR "ide-tape: bug: tape->next_stage != NULL\n");
1631 if (tape->nr_stages) 944 if (tape->nr_stages)
1632 printk(KERN_ERR "ide-tape: bug: nr_stages should be 0 now\n"); 945 printk(KERN_ERR "ide-tape: bug: nr_stages should be 0 now\n");
1633#endif /* IDETAPE_DEBUG_BUGS */
1634 } 946 }
1635} 947}
1636 948
@@ -1716,7 +1028,7 @@ static int idetape_end_request(ide_drive_t *drive, int uptodate, int nr_sects)
1716 } 1028 }
1717 } 1029 }
1718 if (tape->next_stage != NULL) { 1030 if (tape->next_stage != NULL) {
1719 idetape_active_next_stage(drive); 1031 idetape_activate_next_stage(drive);
1720 1032
1721 /* 1033 /*
1722 * Insert the next request into the request queue. 1034 * Insert the next request into the request queue.
@@ -1748,7 +1060,7 @@ static ide_startstop_t idetape_request_sense_callback (ide_drive_t *drive)
1748 printk(KERN_INFO "ide-tape: Reached idetape_request_sense_callback\n"); 1060 printk(KERN_INFO "ide-tape: Reached idetape_request_sense_callback\n");
1749#endif /* IDETAPE_DEBUG_LOG */ 1061#endif /* IDETAPE_DEBUG_LOG */
1750 if (!tape->pc->error) { 1062 if (!tape->pc->error) {
1751 idetape_analyze_error(drive, (idetape_request_sense_result_t *) tape->pc->buffer); 1063 idetape_analyze_error(drive, tape->pc->buffer);
1752 idetape_end_request(drive, 1, 0); 1064 idetape_end_request(drive, 1, 0);
1753 } else { 1065 } else {
1754 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE itself - Aborting request!\n"); 1066 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE itself - Aborting request!\n");
@@ -1760,7 +1072,7 @@ static ide_startstop_t idetape_request_sense_callback (ide_drive_t *drive)
1760static void idetape_create_request_sense_cmd (idetape_pc_t *pc) 1072static void idetape_create_request_sense_cmd (idetape_pc_t *pc)
1761{ 1073{
1762 idetape_init_pc(pc); 1074 idetape_init_pc(pc);
1763 pc->c[0] = IDETAPE_REQUEST_SENSE_CMD; 1075 pc->c[0] = REQUEST_SENSE;
1764 pc->c[4] = 20; 1076 pc->c[4] = 20;
1765 pc->request_transfer = 20; 1077 pc->request_transfer = 20;
1766 pc->callback = &idetape_request_sense_callback; 1078 pc->callback = &idetape_request_sense_callback;
@@ -1913,15 +1225,14 @@ static ide_startstop_t idetape_pc_intr (ide_drive_t *drive)
1913 local_irq_enable(); 1225 local_irq_enable();
1914 1226
1915#if SIMULATE_ERRORS 1227#if SIMULATE_ERRORS
1916 if ((pc->c[0] == IDETAPE_WRITE_CMD || 1228 if ((pc->c[0] == WRITE_6 || pc->c[0] == READ_6) &&
1917 pc->c[0] == IDETAPE_READ_CMD) &&
1918 (++error_sim_count % 100) == 0) { 1229 (++error_sim_count % 100) == 0) {
1919 printk(KERN_INFO "ide-tape: %s: simulating error\n", 1230 printk(KERN_INFO "ide-tape: %s: simulating error\n",
1920 tape->name); 1231 tape->name);
1921 stat |= ERR_STAT; 1232 stat |= ERR_STAT;
1922 } 1233 }
1923#endif 1234#endif
1924 if ((stat & ERR_STAT) && pc->c[0] == IDETAPE_REQUEST_SENSE_CMD) 1235 if ((stat & ERR_STAT) && pc->c[0] == REQUEST_SENSE)
1925 stat &= ~ERR_STAT; 1236 stat &= ~ERR_STAT;
1926 if ((stat & ERR_STAT) || test_bit(PC_DMA_ERROR, &pc->flags)) { 1237 if ((stat & ERR_STAT) || test_bit(PC_DMA_ERROR, &pc->flags)) {
1927 /* Error detected */ 1238 /* Error detected */
@@ -1930,7 +1241,7 @@ static ide_startstop_t idetape_pc_intr (ide_drive_t *drive)
1930 printk(KERN_INFO "ide-tape: %s: I/O error\n", 1241 printk(KERN_INFO "ide-tape: %s: I/O error\n",
1931 tape->name); 1242 tape->name);
1932#endif /* IDETAPE_DEBUG_LOG */ 1243#endif /* IDETAPE_DEBUG_LOG */
1933 if (pc->c[0] == IDETAPE_REQUEST_SENSE_CMD) { 1244 if (pc->c[0] == REQUEST_SENSE) {
1934 printk(KERN_ERR "ide-tape: I/O error in request sense command\n"); 1245 printk(KERN_ERR "ide-tape: I/O error in request sense command\n");
1935 return ide_do_reset(drive); 1246 return ide_do_reset(drive);
1936 } 1247 }
@@ -2118,15 +1429,13 @@ static ide_startstop_t idetape_issue_packet_command (ide_drive_t *drive, idetape
2118 int dma_ok = 0; 1429 int dma_ok = 0;
2119 u16 bcount; 1430 u16 bcount;
2120 1431
2121#if IDETAPE_DEBUG_BUGS 1432 if (tape->pc->c[0] == REQUEST_SENSE &&
2122 if (tape->pc->c[0] == IDETAPE_REQUEST_SENSE_CMD && 1433 pc->c[0] == REQUEST_SENSE) {
2123 pc->c[0] == IDETAPE_REQUEST_SENSE_CMD) {
2124 printk(KERN_ERR "ide-tape: possible ide-tape.c bug - " 1434 printk(KERN_ERR "ide-tape: possible ide-tape.c bug - "
2125 "Two request sense in serial were issued\n"); 1435 "Two request sense in serial were issued\n");
2126 } 1436 }
2127#endif /* IDETAPE_DEBUG_BUGS */
2128 1437
2129 if (tape->failed_pc == NULL && pc->c[0] != IDETAPE_REQUEST_SENSE_CMD) 1438 if (tape->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
2130 tape->failed_pc = pc; 1439 tape->failed_pc = pc;
2131 /* Set the current packet command */ 1440 /* Set the current packet command */
2132 tape->pc = pc; 1441 tape->pc = pc;
@@ -2139,7 +1448,7 @@ static ide_startstop_t idetape_issue_packet_command (ide_drive_t *drive, idetape
2139 * filemark, or end of the media, for example). 1448 * filemark, or end of the media, for example).
2140 */ 1449 */
2141 if (!test_bit(PC_ABORT, &pc->flags)) { 1450 if (!test_bit(PC_ABORT, &pc->flags)) {
2142 if (!(pc->c[0] == IDETAPE_TEST_UNIT_READY_CMD && 1451 if (!(pc->c[0] == TEST_UNIT_READY &&
2143 tape->sense_key == 2 && tape->asc == 4 && 1452 tape->sense_key == 2 && tape->asc == 4 &&
2144 (tape->ascq == 1 || tape->ascq == 8))) { 1453 (tape->ascq == 1 || tape->ascq == 8))) {
2145 printk(KERN_ERR "ide-tape: %s: I/O error, " 1454 printk(KERN_ERR "ide-tape: %s: I/O error, "
@@ -2181,8 +1490,8 @@ static ide_startstop_t idetape_issue_packet_command (ide_drive_t *drive, idetape
2181 if (dma_ok) /* Will begin DMA later */ 1490 if (dma_ok) /* Will begin DMA later */
2182 set_bit(PC_DMA_IN_PROGRESS, &pc->flags); 1491 set_bit(PC_DMA_IN_PROGRESS, &pc->flags);
2183 if (test_bit(IDETAPE_DRQ_INTERRUPT, &tape->flags)) { 1492 if (test_bit(IDETAPE_DRQ_INTERRUPT, &tape->flags)) {
2184 ide_set_handler(drive, &idetape_transfer_pc, IDETAPE_WAIT_CMD, NULL); 1493 ide_execute_command(drive, WIN_PACKETCMD, &idetape_transfer_pc,
2185 hwif->OUTB(WIN_PACKETCMD, IDE_COMMAND_REG); 1494 IDETAPE_WAIT_CMD, NULL);
2186 return ide_started; 1495 return ide_started;
2187 } else { 1496 } else {
2188 hwif->OUTB(WIN_PACKETCMD, IDE_COMMAND_REG); 1497 hwif->OUTB(WIN_PACKETCMD, IDE_COMMAND_REG);
@@ -2212,7 +1521,7 @@ static ide_startstop_t idetape_pc_callback (ide_drive_t *drive)
2212static void idetape_create_mode_sense_cmd (idetape_pc_t *pc, u8 page_code) 1521static void idetape_create_mode_sense_cmd (idetape_pc_t *pc, u8 page_code)
2213{ 1522{
2214 idetape_init_pc(pc); 1523 idetape_init_pc(pc);
2215 pc->c[0] = IDETAPE_MODE_SENSE_CMD; 1524 pc->c[0] = MODE_SENSE;
2216 if (page_code != IDETAPE_BLOCK_DESCRIPTOR) 1525 if (page_code != IDETAPE_BLOCK_DESCRIPTOR)
2217 pc->c[1] = 8; /* DBD = 1 - Don't return block descriptors */ 1526 pc->c[1] = 8; /* DBD = 1 - Don't return block descriptors */
2218 pc->c[2] = page_code; 1527 pc->c[2] = page_code;
@@ -2293,7 +1602,7 @@ static ide_startstop_t idetape_media_access_finished (ide_drive_t *drive)
2293 if (stat & SEEK_STAT) { 1602 if (stat & SEEK_STAT) {
2294 if (stat & ERR_STAT) { 1603 if (stat & ERR_STAT) {
2295 /* Error detected */ 1604 /* Error detected */
2296 if (pc->c[0] != IDETAPE_TEST_UNIT_READY_CMD) 1605 if (pc->c[0] != TEST_UNIT_READY)
2297 printk(KERN_ERR "ide-tape: %s: I/O error, ", 1606 printk(KERN_ERR "ide-tape: %s: I/O error, ",
2298 tape->name); 1607 tape->name);
2299 /* Retry operation */ 1608 /* Retry operation */
@@ -2350,8 +1659,8 @@ static ide_startstop_t idetape_rw_callback (ide_drive_t *drive)
2350static void idetape_create_read_cmd(idetape_tape_t *tape, idetape_pc_t *pc, unsigned int length, struct idetape_bh *bh) 1659static void idetape_create_read_cmd(idetape_tape_t *tape, idetape_pc_t *pc, unsigned int length, struct idetape_bh *bh)
2351{ 1660{
2352 idetape_init_pc(pc); 1661 idetape_init_pc(pc);
2353 pc->c[0] = IDETAPE_READ_CMD; 1662 pc->c[0] = READ_6;
2354 put_unaligned(htonl(length), (unsigned int *) &pc->c[1]); 1663 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
2355 pc->c[1] = 1; 1664 pc->c[1] = 1;
2356 pc->callback = &idetape_rw_callback; 1665 pc->callback = &idetape_rw_callback;
2357 pc->bh = bh; 1666 pc->bh = bh;
@@ -2368,7 +1677,7 @@ static void idetape_create_read_buffer_cmd(idetape_tape_t *tape, idetape_pc_t *p
2368 struct idetape_bh *p = bh; 1677 struct idetape_bh *p = bh;
2369 1678
2370 idetape_init_pc(pc); 1679 idetape_init_pc(pc);
2371 pc->c[0] = IDETAPE_READ_BUFFER_CMD; 1680 pc->c[0] = READ_BUFFER;
2372 pc->c[1] = IDETAPE_RETRIEVE_FAULTY_BLOCK; 1681 pc->c[1] = IDETAPE_RETRIEVE_FAULTY_BLOCK;
2373 pc->c[7] = size >> 8; 1682 pc->c[7] = size >> 8;
2374 pc->c[8] = size & 0xff; 1683 pc->c[8] = size & 0xff;
@@ -2386,8 +1695,8 @@ static void idetape_create_read_buffer_cmd(idetape_tape_t *tape, idetape_pc_t *p
2386static void idetape_create_write_cmd(idetape_tape_t *tape, idetape_pc_t *pc, unsigned int length, struct idetape_bh *bh) 1695static void idetape_create_write_cmd(idetape_tape_t *tape, idetape_pc_t *pc, unsigned int length, struct idetape_bh *bh)
2387{ 1696{
2388 idetape_init_pc(pc); 1697 idetape_init_pc(pc);
2389 pc->c[0] = IDETAPE_WRITE_CMD; 1698 pc->c[0] = WRITE_6;
2390 put_unaligned(htonl(length), (unsigned int *) &pc->c[1]); 1699 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
2391 pc->c[1] = 1; 1700 pc->c[1] = 1;
2392 pc->callback = &idetape_rw_callback; 1701 pc->callback = &idetape_rw_callback;
2393 set_bit(PC_WRITING, &pc->flags); 1702 set_bit(PC_WRITING, &pc->flags);
@@ -2412,12 +1721,6 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
2412 u8 stat; 1721 u8 stat;
2413 1722
2414#if IDETAPE_DEBUG_LOG 1723#if IDETAPE_DEBUG_LOG
2415#if 0
2416 if (tape->debug_level >= 5)
2417 printk(KERN_INFO "ide-tape: %d, "
2418 "dev: %s, cmd: %ld, errors: %d\n",
2419 rq->rq_disk->disk_name, rq->cmd[0], rq->errors);
2420#endif
2421 if (tape->debug_level >= 2) 1724 if (tape->debug_level >= 2)
2422 printk(KERN_INFO "ide-tape: sector: %ld, " 1725 printk(KERN_INFO "ide-tape: sector: %ld, "
2423 "nr_sectors: %ld, current_nr_sectors: %d\n", 1726 "nr_sectors: %ld, current_nr_sectors: %d\n",
@@ -2438,10 +1741,9 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
2438 * Retry a failed packet command 1741 * Retry a failed packet command
2439 */ 1742 */
2440 if (tape->failed_pc != NULL && 1743 if (tape->failed_pc != NULL &&
2441 tape->pc->c[0] == IDETAPE_REQUEST_SENSE_CMD) { 1744 tape->pc->c[0] == REQUEST_SENSE) {
2442 return idetape_issue_packet_command(drive, tape->failed_pc); 1745 return idetape_issue_packet_command(drive, tape->failed_pc);
2443 } 1746 }
2444#if IDETAPE_DEBUG_BUGS
2445 if (postponed_rq != NULL) 1747 if (postponed_rq != NULL)
2446 if (rq != postponed_rq) { 1748 if (rq != postponed_rq) {
2447 printk(KERN_ERR "ide-tape: ide-tape.c bug - " 1749 printk(KERN_ERR "ide-tape: ide-tape.c bug - "
@@ -2449,7 +1751,6 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
2449 idetape_end_request(drive, 0, 0); 1751 idetape_end_request(drive, 0, 0);
2450 return ide_stopped; 1752 return ide_stopped;
2451 } 1753 }
2452#endif /* IDETAPE_DEBUG_BUGS */
2453 1754
2454 tape->postponed_rq = NULL; 1755 tape->postponed_rq = NULL;
2455 1756
@@ -2636,13 +1937,11 @@ static int idetape_copy_stage_from_user (idetape_tape_t *tape, idetape_stage_t *
2636 int ret = 0; 1937 int ret = 0;
2637 1938
2638 while (n) { 1939 while (n) {
2639#if IDETAPE_DEBUG_BUGS
2640 if (bh == NULL) { 1940 if (bh == NULL) {
2641 printk(KERN_ERR "ide-tape: bh == NULL in " 1941 printk(KERN_ERR "ide-tape: bh == NULL in "
2642 "idetape_copy_stage_from_user\n"); 1942 "idetape_copy_stage_from_user\n");
2643 return 1; 1943 return 1;
2644 } 1944 }
2645#endif /* IDETAPE_DEBUG_BUGS */
2646 count = min((unsigned int)(bh->b_size - atomic_read(&bh->b_count)), (unsigned int)n); 1945 count = min((unsigned int)(bh->b_size - atomic_read(&bh->b_count)), (unsigned int)n);
2647 if (copy_from_user(bh->b_data + atomic_read(&bh->b_count), buf, count)) 1946 if (copy_from_user(bh->b_data + atomic_read(&bh->b_count), buf, count))
2648 ret = 1; 1947 ret = 1;
@@ -2666,13 +1965,11 @@ static int idetape_copy_stage_to_user (idetape_tape_t *tape, char __user *buf, i
2666 int ret = 0; 1965 int ret = 0;
2667 1966
2668 while (n) { 1967 while (n) {
2669#if IDETAPE_DEBUG_BUGS
2670 if (bh == NULL) { 1968 if (bh == NULL) {
2671 printk(KERN_ERR "ide-tape: bh == NULL in " 1969 printk(KERN_ERR "ide-tape: bh == NULL in "
2672 "idetape_copy_stage_to_user\n"); 1970 "idetape_copy_stage_to_user\n");
2673 return 1; 1971 return 1;
2674 } 1972 }
2675#endif /* IDETAPE_DEBUG_BUGS */
2676 count = min(tape->b_count, n); 1973 count = min(tape->b_count, n);
2677 if (copy_to_user(buf, tape->b_data, count)) 1974 if (copy_to_user(buf, tape->b_data, count))
2678 ret = 1; 1975 ret = 1;
@@ -2752,12 +2049,10 @@ static void idetape_wait_for_request (ide_drive_t *drive, struct request *rq)
2752 DECLARE_COMPLETION_ONSTACK(wait); 2049 DECLARE_COMPLETION_ONSTACK(wait);
2753 idetape_tape_t *tape = drive->driver_data; 2050 idetape_tape_t *tape = drive->driver_data;
2754 2051
2755#if IDETAPE_DEBUG_BUGS
2756 if (rq == NULL || !blk_special_request(rq)) { 2052 if (rq == NULL || !blk_special_request(rq)) {
2757 printk (KERN_ERR "ide-tape: bug: Trying to sleep on non-valid request\n"); 2053 printk (KERN_ERR "ide-tape: bug: Trying to sleep on non-valid request\n");
2758 return; 2054 return;
2759 } 2055 }
2760#endif /* IDETAPE_DEBUG_BUGS */
2761 rq->end_io_data = &wait; 2056 rq->end_io_data = &wait;
2762 rq->end_io = blk_end_sync_rq; 2057 rq->end_io = blk_end_sync_rq;
2763 spin_unlock_irq(&tape->spinlock); 2058 spin_unlock_irq(&tape->spinlock);
@@ -2817,7 +2112,7 @@ static ide_startstop_t idetape_read_position_callback (ide_drive_t *drive)
2817static void idetape_create_write_filemark_cmd (ide_drive_t *drive, idetape_pc_t *pc,int write_filemark) 2112static void idetape_create_write_filemark_cmd (ide_drive_t *drive, idetape_pc_t *pc,int write_filemark)
2818{ 2113{
2819 idetape_init_pc(pc); 2114 idetape_init_pc(pc);
2820 pc->c[0] = IDETAPE_WRITE_FILEMARK_CMD; 2115 pc->c[0] = WRITE_FILEMARKS;
2821 pc->c[4] = write_filemark; 2116 pc->c[4] = write_filemark;
2822 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2117 set_bit(PC_WAIT_FOR_DSC, &pc->flags);
2823 pc->callback = &idetape_pc_callback; 2118 pc->callback = &idetape_pc_callback;
@@ -2826,7 +2121,7 @@ static void idetape_create_write_filemark_cmd (ide_drive_t *drive, idetape_pc_t
2826static void idetape_create_test_unit_ready_cmd(idetape_pc_t *pc) 2121static void idetape_create_test_unit_ready_cmd(idetape_pc_t *pc)
2827{ 2122{
2828 idetape_init_pc(pc); 2123 idetape_init_pc(pc);
2829 pc->c[0] = IDETAPE_TEST_UNIT_READY_CMD; 2124 pc->c[0] = TEST_UNIT_READY;
2830 pc->callback = &idetape_pc_callback; 2125 pc->callback = &idetape_pc_callback;
2831} 2126}
2832 2127
@@ -2864,7 +2159,7 @@ static int __idetape_queue_pc_tail (ide_drive_t *drive, idetape_pc_t *pc)
2864static void idetape_create_load_unload_cmd (ide_drive_t *drive, idetape_pc_t *pc,int cmd) 2159static void idetape_create_load_unload_cmd (ide_drive_t *drive, idetape_pc_t *pc,int cmd)
2865{ 2160{
2866 idetape_init_pc(pc); 2161 idetape_init_pc(pc);
2867 pc->c[0] = IDETAPE_LOAD_UNLOAD_CMD; 2162 pc->c[0] = START_STOP;
2868 pc->c[4] = cmd; 2163 pc->c[4] = cmd;
2869 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2164 set_bit(PC_WAIT_FOR_DSC, &pc->flags);
2870 pc->callback = &idetape_pc_callback; 2165 pc->callback = &idetape_pc_callback;
@@ -2921,7 +2216,7 @@ static int idetape_flush_tape_buffers (ide_drive_t *drive)
2921static void idetape_create_read_position_cmd (idetape_pc_t *pc) 2216static void idetape_create_read_position_cmd (idetape_pc_t *pc)
2922{ 2217{
2923 idetape_init_pc(pc); 2218 idetape_init_pc(pc);
2924 pc->c[0] = IDETAPE_READ_POSITION_CMD; 2219 pc->c[0] = READ_POSITION;
2925 pc->request_transfer = 20; 2220 pc->request_transfer = 20;
2926 pc->callback = &idetape_read_position_callback; 2221 pc->callback = &idetape_read_position_callback;
2927} 2222}
@@ -2947,9 +2242,9 @@ static int idetape_read_position (ide_drive_t *drive)
2947static void idetape_create_locate_cmd (ide_drive_t *drive, idetape_pc_t *pc, unsigned int block, u8 partition, int skip) 2242static void idetape_create_locate_cmd (ide_drive_t *drive, idetape_pc_t *pc, unsigned int block, u8 partition, int skip)
2948{ 2243{
2949 idetape_init_pc(pc); 2244 idetape_init_pc(pc);
2950 pc->c[0] = IDETAPE_LOCATE_CMD; 2245 pc->c[0] = POSITION_TO_ELEMENT;
2951 pc->c[1] = 2; 2246 pc->c[1] = 2;
2952 put_unaligned(htonl(block), (unsigned int *) &pc->c[3]); 2247 put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]);
2953 pc->c[8] = partition; 2248 pc->c[8] = partition;
2954 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2249 set_bit(PC_WAIT_FOR_DSC, &pc->flags);
2955 pc->callback = &idetape_pc_callback; 2250 pc->callback = &idetape_pc_callback;
@@ -2959,11 +2254,12 @@ static int idetape_create_prevent_cmd (ide_drive_t *drive, idetape_pc_t *pc, int
2959{ 2254{
2960 idetape_tape_t *tape = drive->driver_data; 2255 idetape_tape_t *tape = drive->driver_data;
2961 2256
2962 if (!tape->capabilities.lock) 2257 /* device supports locking according to capabilities page */
2258 if (!(tape->caps[6] & 0x01))
2963 return 0; 2259 return 0;
2964 2260
2965 idetape_init_pc(pc); 2261 idetape_init_pc(pc);
2966 pc->c[0] = IDETAPE_PREVENT_CMD; 2262 pc->c[0] = ALLOW_MEDIUM_REMOVAL;
2967 pc->c[4] = prevent; 2263 pc->c[4] = prevent;
2968 pc->callback = &idetape_pc_callback; 2264 pc->callback = &idetape_pc_callback;
2969 return 1; 2265 return 1;
@@ -3072,12 +2368,10 @@ static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int blocks, struct
3072 if (tape->debug_level >= 2) 2368 if (tape->debug_level >= 2)
3073 printk(KERN_INFO "ide-tape: idetape_queue_rw_tail: cmd=%d\n",cmd); 2369 printk(KERN_INFO "ide-tape: idetape_queue_rw_tail: cmd=%d\n",cmd);
3074#endif /* IDETAPE_DEBUG_LOG */ 2370#endif /* IDETAPE_DEBUG_LOG */
3075#if IDETAPE_DEBUG_BUGS
3076 if (idetape_pipeline_active(tape)) { 2371 if (idetape_pipeline_active(tape)) {
3077 printk(KERN_ERR "ide-tape: bug: the pipeline is active in idetape_queue_rw_tail\n"); 2372 printk(KERN_ERR "ide-tape: bug: the pipeline is active in idetape_queue_rw_tail\n");
3078 return (0); 2373 return (0);
3079 } 2374 }
3080#endif /* IDETAPE_DEBUG_BUGS */
3081 2375
3082 idetape_init_rq(&rq, cmd); 2376 idetape_init_rq(&rq, cmd);
3083 rq.rq_disk = tape->disk; 2377 rq.rq_disk = tape->disk;
@@ -3108,7 +2402,7 @@ static void idetape_insert_pipeline_into_queue (ide_drive_t *drive)
3108 return; 2402 return;
3109 if (!idetape_pipeline_active(tape)) { 2403 if (!idetape_pipeline_active(tape)) {
3110 set_bit(IDETAPE_PIPELINE_ACTIVE, &tape->flags); 2404 set_bit(IDETAPE_PIPELINE_ACTIVE, &tape->flags);
3111 idetape_active_next_stage(drive); 2405 idetape_activate_next_stage(drive);
3112 (void) ide_do_drive_cmd(drive, tape->active_data_request, ide_end); 2406 (void) ide_do_drive_cmd(drive, tape->active_data_request, ide_end);
3113 } 2407 }
3114} 2408}
@@ -3116,7 +2410,7 @@ static void idetape_insert_pipeline_into_queue (ide_drive_t *drive)
3116static void idetape_create_inquiry_cmd (idetape_pc_t *pc) 2410static void idetape_create_inquiry_cmd (idetape_pc_t *pc)
3117{ 2411{
3118 idetape_init_pc(pc); 2412 idetape_init_pc(pc);
3119 pc->c[0] = IDETAPE_INQUIRY_CMD; 2413 pc->c[0] = INQUIRY;
3120 pc->c[4] = pc->request_transfer = 254; 2414 pc->c[4] = pc->request_transfer = 254;
3121 pc->callback = &idetape_pc_callback; 2415 pc->callback = &idetape_pc_callback;
3122} 2416}
@@ -3124,28 +2418,15 @@ static void idetape_create_inquiry_cmd (idetape_pc_t *pc)
3124static void idetape_create_rewind_cmd (ide_drive_t *drive, idetape_pc_t *pc) 2418static void idetape_create_rewind_cmd (ide_drive_t *drive, idetape_pc_t *pc)
3125{ 2419{
3126 idetape_init_pc(pc); 2420 idetape_init_pc(pc);
3127 pc->c[0] = IDETAPE_REWIND_CMD; 2421 pc->c[0] = REZERO_UNIT;
3128 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2422 set_bit(PC_WAIT_FOR_DSC, &pc->flags);
3129 pc->callback = &idetape_pc_callback; 2423 pc->callback = &idetape_pc_callback;
3130} 2424}
3131 2425
3132#if 0
3133static void idetape_create_mode_select_cmd (idetape_pc_t *pc, int length)
3134{
3135 idetape_init_pc(pc);
3136 set_bit(PC_WRITING, &pc->flags);
3137 pc->c[0] = IDETAPE_MODE_SELECT_CMD;
3138 pc->c[1] = 0x10;
3139 put_unaligned(htons(length), (unsigned short *) &pc->c[3]);
3140 pc->request_transfer = 255;
3141 pc->callback = &idetape_pc_callback;
3142}
3143#endif
3144
3145static void idetape_create_erase_cmd (idetape_pc_t *pc) 2426static void idetape_create_erase_cmd (idetape_pc_t *pc)
3146{ 2427{
3147 idetape_init_pc(pc); 2428 idetape_init_pc(pc);
3148 pc->c[0] = IDETAPE_ERASE_CMD; 2429 pc->c[0] = ERASE;
3149 pc->c[1] = 1; 2430 pc->c[1] = 1;
3150 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2431 set_bit(PC_WAIT_FOR_DSC, &pc->flags);
3151 pc->callback = &idetape_pc_callback; 2432 pc->callback = &idetape_pc_callback;
@@ -3154,8 +2435,8 @@ static void idetape_create_erase_cmd (idetape_pc_t *pc)
3154static void idetape_create_space_cmd (idetape_pc_t *pc,int count, u8 cmd) 2435static void idetape_create_space_cmd (idetape_pc_t *pc,int count, u8 cmd)
3155{ 2436{
3156 idetape_init_pc(pc); 2437 idetape_init_pc(pc);
3157 pc->c[0] = IDETAPE_SPACE_CMD; 2438 pc->c[0] = SPACE;
3158 put_unaligned(htonl(count), (unsigned int *) &pc->c[1]); 2439 put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]);
3159 pc->c[1] = cmd; 2440 pc->c[1] = cmd;
3160 set_bit(PC_WAIT_FOR_DSC, &pc->flags); 2441 set_bit(PC_WAIT_FOR_DSC, &pc->flags);
3161 pc->callback = &idetape_pc_callback; 2442 pc->callback = &idetape_pc_callback;
@@ -3275,8 +2556,7 @@ static void idetape_empty_write_pipeline (ide_drive_t *drive)
3275 idetape_tape_t *tape = drive->driver_data; 2556 idetape_tape_t *tape = drive->driver_data;
3276 int blocks, min; 2557 int blocks, min;
3277 struct idetape_bh *bh; 2558 struct idetape_bh *bh;
3278 2559
3279#if IDETAPE_DEBUG_BUGS
3280 if (tape->chrdev_direction != idetape_direction_write) { 2560 if (tape->chrdev_direction != idetape_direction_write) {
3281 printk(KERN_ERR "ide-tape: bug: Trying to empty write pipeline, but we are not writing.\n"); 2561 printk(KERN_ERR "ide-tape: bug: Trying to empty write pipeline, but we are not writing.\n");
3282 return; 2562 return;
@@ -3285,7 +2565,6 @@ static void idetape_empty_write_pipeline (ide_drive_t *drive)
3285 printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n"); 2565 printk(KERN_ERR "ide-tape: bug: merge_buffer too big\n");
3286 tape->merge_stage_size = tape->stage_size; 2566 tape->merge_stage_size = tape->stage_size;
3287 } 2567 }
3288#endif /* IDETAPE_DEBUG_BUGS */
3289 if (tape->merge_stage_size) { 2568 if (tape->merge_stage_size) {
3290 blocks = tape->merge_stage_size / tape->tape_block_size; 2569 blocks = tape->merge_stage_size / tape->tape_block_size;
3291 if (tape->merge_stage_size % tape->tape_block_size) { 2570 if (tape->merge_stage_size % tape->tape_block_size) {
@@ -3330,7 +2609,6 @@ static void idetape_empty_write_pipeline (ide_drive_t *drive)
3330 * can be totally different on the next backup). 2609 * can be totally different on the next backup).
3331 */ 2610 */
3332 tape->max_stages = tape->min_pipeline; 2611 tape->max_stages = tape->min_pipeline;
3333#if IDETAPE_DEBUG_BUGS
3334 if (tape->first_stage != NULL || 2612 if (tape->first_stage != NULL ||
3335 tape->next_stage != NULL || 2613 tape->next_stage != NULL ||
3336 tape->last_stage != NULL || 2614 tape->last_stage != NULL ||
@@ -3341,7 +2619,6 @@ static void idetape_empty_write_pipeline (ide_drive_t *drive)
3341 tape->first_stage, tape->next_stage, 2619 tape->first_stage, tape->next_stage,
3342 tape->last_stage, tape->nr_stages); 2620 tape->last_stage, tape->nr_stages);
3343 } 2621 }
3344#endif /* IDETAPE_DEBUG_BUGS */
3345} 2622}
3346 2623
3347static void idetape_restart_speed_control (ide_drive_t *drive) 2624static void idetape_restart_speed_control (ide_drive_t *drive)
@@ -3364,7 +2641,7 @@ static int idetape_initiate_read (ide_drive_t *drive, int max_stages)
3364 idetape_stage_t *new_stage; 2641 idetape_stage_t *new_stage;
3365 struct request rq; 2642 struct request rq;
3366 int bytes_read; 2643 int bytes_read;
3367 int blocks = tape->capabilities.ctl; 2644 u16 blocks = *(u16 *)&tape->caps[12];
3368 2645
3369 /* Initialize read operation */ 2646 /* Initialize read operation */
3370 if (tape->chrdev_direction != idetape_direction_read) { 2647 if (tape->chrdev_direction != idetape_direction_read) {
@@ -3372,12 +2649,10 @@ static int idetape_initiate_read (ide_drive_t *drive, int max_stages)
3372 idetape_empty_write_pipeline(drive); 2649 idetape_empty_write_pipeline(drive);
3373 idetape_flush_tape_buffers(drive); 2650 idetape_flush_tape_buffers(drive);
3374 } 2651 }
3375#if IDETAPE_DEBUG_BUGS
3376 if (tape->merge_stage || tape->merge_stage_size) { 2652 if (tape->merge_stage || tape->merge_stage_size) {
3377 printk (KERN_ERR "ide-tape: merge_stage_size should be 0 now\n"); 2653 printk (KERN_ERR "ide-tape: merge_stage_size should be 0 now\n");
3378 tape->merge_stage_size = 0; 2654 tape->merge_stage_size = 0;
3379 } 2655 }
3380#endif /* IDETAPE_DEBUG_BUGS */
3381 if ((tape->merge_stage = __idetape_kmalloc_stage(tape, 0, 0)) == NULL) 2656 if ((tape->merge_stage = __idetape_kmalloc_stage(tape, 0, 0)) == NULL)
3382 return -ENOMEM; 2657 return -ENOMEM;
3383 tape->chrdev_direction = idetape_direction_read; 2658 tape->chrdev_direction = idetape_direction_read;
@@ -3478,12 +2753,10 @@ static int idetape_add_chrdev_read_request (ide_drive_t *drive,int blocks)
3478 tape->pipeline_head++; 2753 tape->pipeline_head++;
3479 calculate_speeds(drive); 2754 calculate_speeds(drive);
3480 } 2755 }
3481#if IDETAPE_DEBUG_BUGS
3482 if (bytes_read > blocks * tape->tape_block_size) { 2756 if (bytes_read > blocks * tape->tape_block_size) {
3483 printk(KERN_ERR "ide-tape: bug: trying to return more bytes than requested\n"); 2757 printk(KERN_ERR "ide-tape: bug: trying to return more bytes than requested\n");
3484 bytes_read = blocks * tape->tape_block_size; 2758 bytes_read = blocks * tape->tape_block_size;
3485 } 2759 }
3486#endif /* IDETAPE_DEBUG_BUGS */
3487 return (bytes_read); 2760 return (bytes_read);
3488} 2761}
3489 2762
@@ -3567,16 +2840,21 @@ static int idetape_rewind_tape (ide_drive_t *drive)
3567static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd, unsigned long arg) 2840static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd, unsigned long arg)
3568{ 2841{
3569 idetape_tape_t *tape = drive->driver_data; 2842 idetape_tape_t *tape = drive->driver_data;
3570 idetape_config_t config;
3571 void __user *argp = (void __user *)arg; 2843 void __user *argp = (void __user *)arg;
3572 2844
2845 struct idetape_config {
2846 int dsc_rw_frequency;
2847 int dsc_media_access_frequency;
2848 int nr_stages;
2849 } config;
2850
3573#if IDETAPE_DEBUG_LOG 2851#if IDETAPE_DEBUG_LOG
3574 if (tape->debug_level >= 4) 2852 if (tape->debug_level >= 4)
3575 printk(KERN_INFO "ide-tape: Reached idetape_blkdev_ioctl\n"); 2853 printk(KERN_INFO "ide-tape: Reached idetape_blkdev_ioctl\n");
3576#endif /* IDETAPE_DEBUG_LOG */ 2854#endif /* IDETAPE_DEBUG_LOG */
3577 switch (cmd) { 2855 switch (cmd) {
3578 case 0x0340: 2856 case 0x0340:
3579 if (copy_from_user(&config, argp, sizeof (idetape_config_t))) 2857 if (copy_from_user(&config, argp, sizeof(config)))
3580 return -EFAULT; 2858 return -EFAULT;
3581 tape->best_dsc_rw_frequency = config.dsc_rw_frequency; 2859 tape->best_dsc_rw_frequency = config.dsc_rw_frequency;
3582 tape->max_stages = config.nr_stages; 2860 tape->max_stages = config.nr_stages;
@@ -3584,7 +2862,7 @@ static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd, unsigned l
3584 case 0x0350: 2862 case 0x0350:
3585 config.dsc_rw_frequency = (int) tape->best_dsc_rw_frequency; 2863 config.dsc_rw_frequency = (int) tape->best_dsc_rw_frequency;
3586 config.nr_stages = tape->max_stages; 2864 config.nr_stages = tape->max_stages;
3587 if (copy_to_user(argp, &config, sizeof (idetape_config_t))) 2865 if (copy_to_user(argp, &config, sizeof(config)))
3588 return -EFAULT; 2866 return -EFAULT;
3589 break; 2867 break;
3590 default: 2868 default:
@@ -3608,11 +2886,12 @@ static int idetape_space_over_filemarks (ide_drive_t *drive,short mt_op,int mt_c
3608 idetape_pc_t pc; 2886 idetape_pc_t pc;
3609 unsigned long flags; 2887 unsigned long flags;
3610 int retval,count=0; 2888 int retval,count=0;
2889 int sprev = !!(tape->caps[4] & 0x20);
3611 2890
3612 if (mt_count == 0) 2891 if (mt_count == 0)
3613 return 0; 2892 return 0;
3614 if (MTBSF == mt_op || MTBSFM == mt_op) { 2893 if (MTBSF == mt_op || MTBSFM == mt_op) {
3615 if (!tape->capabilities.sprev) 2894 if (!sprev)
3616 return -EIO; 2895 return -EIO;
3617 mt_count = - mt_count; 2896 mt_count = - mt_count;
3618 } 2897 }
@@ -3666,7 +2945,7 @@ static int idetape_space_over_filemarks (ide_drive_t *drive,short mt_op,int mt_c
3666 return (idetape_queue_pc_tail(drive, &pc)); 2945 return (idetape_queue_pc_tail(drive, &pc));
3667 case MTFSFM: 2946 case MTFSFM:
3668 case MTBSFM: 2947 case MTBSFM:
3669 if (!tape->capabilities.sprev) 2948 if (!sprev)
3670 return (-EIO); 2949 return (-EIO);
3671 retval = idetape_space_over_filemarks(drive, MTFSF, mt_count-count); 2950 retval = idetape_space_over_filemarks(drive, MTFSF, mt_count-count);
3672 if (retval) return (retval); 2951 if (retval) return (retval);
@@ -3703,6 +2982,7 @@ static ssize_t idetape_chrdev_read (struct file *file, char __user *buf,
3703 ide_drive_t *drive = tape->drive; 2982 ide_drive_t *drive = tape->drive;
3704 ssize_t bytes_read,temp, actually_read = 0, rc; 2983 ssize_t bytes_read,temp, actually_read = 0, rc;
3705 ssize_t ret = 0; 2984 ssize_t ret = 0;
2985 u16 ctl = *(u16 *)&tape->caps[12];
3706 2986
3707#if IDETAPE_DEBUG_LOG 2987#if IDETAPE_DEBUG_LOG
3708 if (tape->debug_level >= 3) 2988 if (tape->debug_level >= 3)
@@ -3728,7 +3008,7 @@ static ssize_t idetape_chrdev_read (struct file *file, char __user *buf,
3728 count -= actually_read; 3008 count -= actually_read;
3729 } 3009 }
3730 while (count >= tape->stage_size) { 3010 while (count >= tape->stage_size) {
3731 bytes_read = idetape_add_chrdev_read_request(drive, tape->capabilities.ctl); 3011 bytes_read = idetape_add_chrdev_read_request(drive, ctl);
3732 if (bytes_read <= 0) 3012 if (bytes_read <= 0)
3733 goto finish; 3013 goto finish;
3734 if (idetape_copy_stage_to_user(tape, buf, tape->merge_stage, bytes_read)) 3014 if (idetape_copy_stage_to_user(tape, buf, tape->merge_stage, bytes_read))
@@ -3738,7 +3018,7 @@ static ssize_t idetape_chrdev_read (struct file *file, char __user *buf,
3738 actually_read += bytes_read; 3018 actually_read += bytes_read;
3739 } 3019 }
3740 if (count) { 3020 if (count) {
3741 bytes_read = idetape_add_chrdev_read_request(drive, tape->capabilities.ctl); 3021 bytes_read = idetape_add_chrdev_read_request(drive, ctl);
3742 if (bytes_read <= 0) 3022 if (bytes_read <= 0)
3743 goto finish; 3023 goto finish;
3744 temp = min((unsigned long)count, (unsigned long)bytes_read); 3024 temp = min((unsigned long)count, (unsigned long)bytes_read);
@@ -3767,6 +3047,7 @@ static ssize_t idetape_chrdev_write (struct file *file, const char __user *buf,
3767 ide_drive_t *drive = tape->drive; 3047 ide_drive_t *drive = tape->drive;
3768 ssize_t actually_written = 0; 3048 ssize_t actually_written = 0;
3769 ssize_t ret = 0; 3049 ssize_t ret = 0;
3050 u16 ctl = *(u16 *)&tape->caps[12];
3770 3051
3771 /* The drive is write protected. */ 3052 /* The drive is write protected. */
3772 if (tape->write_prot) 3053 if (tape->write_prot)
@@ -3782,13 +3063,11 @@ static ssize_t idetape_chrdev_write (struct file *file, const char __user *buf,
3782 if (tape->chrdev_direction != idetape_direction_write) { 3063 if (tape->chrdev_direction != idetape_direction_write) {
3783 if (tape->chrdev_direction == idetape_direction_read) 3064 if (tape->chrdev_direction == idetape_direction_read)
3784 idetape_discard_read_pipeline(drive, 1); 3065 idetape_discard_read_pipeline(drive, 1);
3785#if IDETAPE_DEBUG_BUGS
3786 if (tape->merge_stage || tape->merge_stage_size) { 3066 if (tape->merge_stage || tape->merge_stage_size) {
3787 printk(KERN_ERR "ide-tape: merge_stage_size " 3067 printk(KERN_ERR "ide-tape: merge_stage_size "
3788 "should be 0 now\n"); 3068 "should be 0 now\n");
3789 tape->merge_stage_size = 0; 3069 tape->merge_stage_size = 0;
3790 } 3070 }
3791#endif /* IDETAPE_DEBUG_BUGS */
3792 if ((tape->merge_stage = __idetape_kmalloc_stage(tape, 0, 0)) == NULL) 3071 if ((tape->merge_stage = __idetape_kmalloc_stage(tape, 0, 0)) == NULL)
3793 return -ENOMEM; 3072 return -ENOMEM;
3794 tape->chrdev_direction = idetape_direction_write; 3073 tape->chrdev_direction = idetape_direction_write;
@@ -3816,12 +3095,10 @@ static ssize_t idetape_chrdev_write (struct file *file, const char __user *buf,
3816 if (tape->restart_speed_control_req) 3095 if (tape->restart_speed_control_req)
3817 idetape_restart_speed_control(drive); 3096 idetape_restart_speed_control(drive);
3818 if (tape->merge_stage_size) { 3097 if (tape->merge_stage_size) {
3819#if IDETAPE_DEBUG_BUGS
3820 if (tape->merge_stage_size >= tape->stage_size) { 3098 if (tape->merge_stage_size >= tape->stage_size) {
3821 printk(KERN_ERR "ide-tape: bug: merge buffer too big\n"); 3099 printk(KERN_ERR "ide-tape: bug: merge buffer too big\n");
3822 tape->merge_stage_size = 0; 3100 tape->merge_stage_size = 0;
3823 } 3101 }
3824#endif /* IDETAPE_DEBUG_BUGS */
3825 actually_written = min((unsigned int)(tape->stage_size - tape->merge_stage_size), (unsigned int)count); 3102 actually_written = min((unsigned int)(tape->stage_size - tape->merge_stage_size), (unsigned int)count);
3826 if (idetape_copy_stage_from_user(tape, tape->merge_stage, buf, actually_written)) 3103 if (idetape_copy_stage_from_user(tape, tape->merge_stage, buf, actually_written))
3827 ret = -EFAULT; 3104 ret = -EFAULT;
@@ -3832,7 +3109,7 @@ static ssize_t idetape_chrdev_write (struct file *file, const char __user *buf,
3832 if (tape->merge_stage_size == tape->stage_size) { 3109 if (tape->merge_stage_size == tape->stage_size) {
3833 ssize_t retval; 3110 ssize_t retval;
3834 tape->merge_stage_size = 0; 3111 tape->merge_stage_size = 0;
3835 retval = idetape_add_chrdev_write_request(drive, tape->capabilities.ctl); 3112 retval = idetape_add_chrdev_write_request(drive, ctl);
3836 if (retval <= 0) 3113 if (retval <= 0)
3837 return (retval); 3114 return (retval);
3838 } 3115 }
@@ -3843,7 +3120,7 @@ static ssize_t idetape_chrdev_write (struct file *file, const char __user *buf,
3843 ret = -EFAULT; 3120 ret = -EFAULT;
3844 buf += tape->stage_size; 3121 buf += tape->stage_size;
3845 count -= tape->stage_size; 3122 count -= tape->stage_size;
3846 retval = idetape_add_chrdev_write_request(drive, tape->capabilities.ctl); 3123 retval = idetape_add_chrdev_write_request(drive, ctl);
3847 actually_written += tape->stage_size; 3124 actually_written += tape->stage_size;
3848 if (retval <= 0) 3125 if (retval <= 0)
3849 return (retval); 3126 return (retval);
@@ -3871,69 +3148,20 @@ static int idetape_write_filemark (ide_drive_t *drive)
3871} 3148}
3872 3149
3873/* 3150/*
3874 * idetape_mtioctop is called from idetape_chrdev_ioctl when 3151 * Called from idetape_chrdev_ioctl when the general mtio MTIOCTOP ioctl is
3875 * the general mtio MTIOCTOP ioctl is requested. 3152 * requested.
3876 *
3877 * We currently support the following mtio.h operations:
3878 * 3153 *
3879 * MTFSF - Space over mt_count filemarks in the positive direction. 3154 * Note: MTBSF and MTBSFM are not supported when the tape doesn't support
3880 * The tape is positioned after the last spaced filemark. 3155 * spacing over filemarks in the reverse direction. In this case, MTFSFM is also
3156 * usually not supported (it is supported in the rare case in which we crossed
3157 * the filemark during our read-ahead pipelined operation mode).
3881 * 3158 *
3882 * MTFSFM - Same as MTFSF, but the tape is positioned before the 3159 * The following commands are currently not supported:
3883 * last filemark.
3884 * 3160 *
3885 * MTBSF - Steps background over mt_count filemarks, tape is 3161 * MTFSS, MTBSS, MTWSM, MTSETDENSITY, MTSETDRVBUFFER, MT_ST_BOOLEANS,
3886 * positioned before the last filemark. 3162 * MT_ST_WRITE_THRESHOLD.
3887 *
3888 * MTBSFM - Like MTBSF, only tape is positioned after the last filemark.
3889 *
3890 * Note:
3891 *
3892 * MTBSF and MTBSFM are not supported when the tape doesn't
3893 * support spacing over filemarks in the reverse direction.
3894 * In this case, MTFSFM is also usually not supported (it is
3895 * supported in the rare case in which we crossed the filemark
3896 * during our read-ahead pipelined operation mode).
3897 *
3898 * MTWEOF - Writes mt_count filemarks. Tape is positioned after
3899 * the last written filemark.
3900 *
3901 * MTREW - Rewinds tape.
3902 *
3903 * MTLOAD - Loads the tape.
3904 *
3905 * MTOFFL - Puts the tape drive "Offline": Rewinds the tape and
3906 * MTUNLOAD prevents further access until the media is replaced.
3907 *
3908 * MTNOP - Flushes tape buffers.
3909 *
3910 * MTRETEN - Retension media. This typically consists of one end
3911 * to end pass on the media.
3912 *
3913 * MTEOM - Moves to the end of recorded data.
3914 *
3915 * MTERASE - Erases tape.
3916 *
3917 * MTSETBLK - Sets the user block size to mt_count bytes. If
3918 * mt_count is 0, we will attempt to autodetect
3919 * the block size.
3920 *
3921 * MTSEEK - Positions the tape in a specific block number, where
3922 * each block is assumed to contain which user_block_size
3923 * bytes.
3924 *
3925 * MTSETPART - Switches to another tape partition.
3926 *
3927 * MTLOCK - Locks the tape door.
3928 *
3929 * MTUNLOCK - Unlocks the tape door.
3930 *
3931 * The following commands are currently not supported:
3932 *
3933 * MTFSS, MTBSS, MTWSM, MTSETDENSITY,
3934 * MTSETDRVBUFFER, MT_ST_BOOLEANS, MT_ST_WRITE_THRESHOLD.
3935 */ 3163 */
3936static int idetape_mtioctop (ide_drive_t *drive,short mt_op,int mt_count) 3164static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
3937{ 3165{
3938 idetape_tape_t *tape = drive->driver_data; 3166 idetape_tape_t *tape = drive->driver_data;
3939 idetape_pc_t pc; 3167 idetape_pc_t pc;
@@ -4048,29 +3276,12 @@ static int idetape_mtioctop (ide_drive_t *drive,short mt_op,int mt_count)
4048} 3276}
4049 3277
4050/* 3278/*
4051 * Our character device ioctls. 3279 * Our character device ioctls. General mtio.h magnetic io commands are
4052 * 3280 * supported here, and not in the corresponding block interface. Our own
4053 * General mtio.h magnetic io commands are supported here, and not in 3281 * ide-tape ioctls are supported on both interfaces.
4054 * the corresponding block interface.
4055 *
4056 * The following ioctls are supported:
4057 *
4058 * MTIOCTOP - Refer to idetape_mtioctop for detailed description.
4059 *
4060 * MTIOCGET - The mt_dsreg field in the returned mtget structure
4061 * will be set to (user block size in bytes <<
4062 * MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK.
4063 *
4064 * The mt_blkno is set to the current user block number.
4065 * The other mtget fields are not supported.
4066 *
4067 * MTIOCPOS - The current tape "block position" is returned. We
4068 * assume that each block contains user_block_size
4069 * bytes.
4070 *
4071 * Our own ide-tape ioctls are supported on both interfaces.
4072 */ 3282 */
4073static int idetape_chrdev_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 3283static int idetape_chrdev_ioctl(struct inode *inode, struct file *file,
3284 unsigned int cmd, unsigned long arg)
4074{ 3285{
4075 struct ide_tape_obj *tape = ide_tape_f(file); 3286 struct ide_tape_obj *tape = ide_tape_f(file);
4076 ide_drive_t *drive = tape->drive; 3287 ide_drive_t *drive = tape->drive;
@@ -4124,7 +3335,30 @@ static int idetape_chrdev_ioctl (struct inode *inode, struct file *file, unsigne
4124 } 3335 }
4125} 3336}
4126 3337
4127static void idetape_get_blocksize_from_block_descriptor(ide_drive_t *drive); 3338/*
3339 * Do a mode sense page 0 with block descriptor and if it succeeds set the tape
3340 * block size with the reported value.
3341 */
3342static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
3343{
3344 idetape_tape_t *tape = drive->driver_data;
3345 idetape_pc_t pc;
3346
3347 idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
3348 if (idetape_queue_pc_tail(drive, &pc)) {
3349 printk(KERN_ERR "ide-tape: Can't get block descriptor\n");
3350 if (tape->tape_block_size == 0) {
3351 printk(KERN_WARNING "ide-tape: Cannot deal with zero "
3352 "block size, assuming 32k\n");
3353 tape->tape_block_size = 32768;
3354 }
3355 return;
3356 }
3357 tape->tape_block_size = (pc.buffer[4 + 5] << 16) +
3358 (pc.buffer[4 + 6] << 8) +
3359 pc.buffer[4 + 7];
3360 tape->drv_write_prot = (pc.buffer[2] & 0x80) >> 7;
3361}
4128 3362
4129/* 3363/*
4130 * Our character device open function. 3364 * Our character device open function.
@@ -4178,7 +3412,7 @@ static int idetape_chrdev_open (struct inode *inode, struct file *filp)
4178 clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags); 3412 clear_bit(IDETAPE_PIPELINE_ERROR, &tape->flags);
4179 3413
4180 /* Read block size and write protect status from drive. */ 3414 /* Read block size and write protect status from drive. */
4181 idetape_get_blocksize_from_block_descriptor(drive); 3415 ide_tape_get_bsize_from_bdesc(drive);
4182 3416
4183 /* Set write protect flag if device is opened as read-only. */ 3417 /* Set write protect flag if device is opened as read-only. */
4184 if ((filp->f_flags & O_ACCMODE) == O_RDONLY) 3418 if ((filp->f_flags & O_ACCMODE) == O_RDONLY)
@@ -4296,190 +3530,100 @@ static int idetape_identify_device (ide_drive_t *drive)
4296 3530
4297 *((unsigned short *) &gcw) = id->config; 3531 *((unsigned short *) &gcw) = id->config;
4298 3532
4299#if IDETAPE_DEBUG_INFO
4300 printk(KERN_INFO "ide-tape: Dumping ATAPI Identify Device tape parameters\n");
4301 printk(KERN_INFO "ide-tape: Protocol Type: ");
4302 switch (gcw.protocol) {
4303 case 0: case 1: printk("ATA\n");break;
4304 case 2: printk("ATAPI\n");break;
4305 case 3: printk("Reserved (Unknown to ide-tape)\n");break;
4306 }
4307 printk(KERN_INFO "ide-tape: Device Type: %x - ",gcw.device_type);
4308 switch (gcw.device_type) {
4309 case 0: printk("Direct-access Device\n");break;
4310 case 1: printk("Streaming Tape Device\n");break;
4311 case 2: case 3: case 4: printk("Reserved\n");break;
4312 case 5: printk("CD-ROM Device\n");break;
4313 case 6: printk("Reserved\n");
4314 case 7: printk("Optical memory Device\n");break;
4315 case 0x1f: printk("Unknown or no Device type\n");break;
4316 default: printk("Reserved\n");
4317 }
4318 printk(KERN_INFO "ide-tape: Removable: %s",gcw.removable ? "Yes\n":"No\n");
4319 printk(KERN_INFO "ide-tape: Command Packet DRQ Type: ");
4320 switch (gcw.drq_type) {
4321 case 0: printk("Microprocessor DRQ\n");break;
4322 case 1: printk("Interrupt DRQ\n");break;
4323 case 2: printk("Accelerated DRQ\n");break;
4324 case 3: printk("Reserved\n");break;
4325 }
4326 printk(KERN_INFO "ide-tape: Command Packet Size: ");
4327 switch (gcw.packet_size) {
4328 case 0: printk("12 bytes\n");break;
4329 case 1: printk("16 bytes\n");break;
4330 default: printk("Reserved\n");break;
4331 }
4332#endif /* IDETAPE_DEBUG_INFO */
4333
4334 /* Check that we can support this device */ 3533 /* Check that we can support this device */
4335 3534
4336 if (gcw.protocol !=2 ) 3535 if (gcw.protocol != 2)
4337 printk(KERN_ERR "ide-tape: Protocol is not ATAPI\n"); 3536 printk(KERN_ERR "ide-tape: Protocol (0x%02x) is not ATAPI\n",
3537 gcw.protocol);
4338 else if (gcw.device_type != 1) 3538 else if (gcw.device_type != 1)
4339 printk(KERN_ERR "ide-tape: Device type is not set to tape\n"); 3539 printk(KERN_ERR "ide-tape: Device type (0x%02x) is not set "
3540 "to tape\n", gcw.device_type);
4340 else if (!gcw.removable) 3541 else if (!gcw.removable)
4341 printk(KERN_ERR "ide-tape: The removable flag is not set\n"); 3542 printk(KERN_ERR "ide-tape: The removable flag is not set\n");
4342 else if (gcw.packet_size != 0) { 3543 else if (gcw.packet_size != 0) {
4343 printk(KERN_ERR "ide-tape: Packet size is not 12 bytes long\n"); 3544 printk(KERN_ERR "ide-tape: Packet size (0x%02x) is not 12 "
4344 if (gcw.packet_size == 1) 3545 "bytes long\n", gcw.packet_size);
4345 printk(KERN_ERR "ide-tape: Sorry, padding to 16 bytes is still not supported\n");
4346 } else 3546 } else
4347 return 1; 3547 return 1;
4348 return 0; 3548 return 0;
4349} 3549}
4350 3550
4351/* 3551static void idetape_get_inquiry_results(ide_drive_t *drive)
4352 * Use INQUIRY to get the firmware revision
4353 */
4354static void idetape_get_inquiry_results (ide_drive_t *drive)
4355{ 3552{
4356 char *r; 3553 char *r;
4357 idetape_tape_t *tape = drive->driver_data; 3554 idetape_tape_t *tape = drive->driver_data;
4358 idetape_pc_t pc; 3555 idetape_pc_t pc;
4359 idetape_inquiry_result_t *inquiry; 3556
4360
4361 idetape_create_inquiry_cmd(&pc); 3557 idetape_create_inquiry_cmd(&pc);
4362 if (idetape_queue_pc_tail(drive, &pc)) { 3558 if (idetape_queue_pc_tail(drive, &pc)) {
4363 printk(KERN_ERR "ide-tape: %s: can't get INQUIRY results\n", tape->name); 3559 printk(KERN_ERR "ide-tape: %s: can't get INQUIRY results\n",
3560 tape->name);
4364 return; 3561 return;
4365 } 3562 }
4366 inquiry = (idetape_inquiry_result_t *) pc.buffer; 3563 memcpy(tape->vendor_id, &pc.buffer[8], 8);
4367 memcpy(tape->vendor_id, inquiry->vendor_id, 8); 3564 memcpy(tape->product_id, &pc.buffer[16], 16);
4368 memcpy(tape->product_id, inquiry->product_id, 16); 3565 memcpy(tape->firmware_revision, &pc.buffer[32], 4);
4369 memcpy(tape->firmware_revision, inquiry->revision_level, 4); 3566
4370 ide_fixstring(tape->vendor_id, 10, 0); 3567 ide_fixstring(tape->vendor_id, 10, 0);
4371 ide_fixstring(tape->product_id, 18, 0); 3568 ide_fixstring(tape->product_id, 18, 0);
4372 ide_fixstring(tape->firmware_revision, 6, 0); 3569 ide_fixstring(tape->firmware_revision, 6, 0);
4373 r = tape->firmware_revision; 3570 r = tape->firmware_revision;
4374 if (*(r + 1) == '.') 3571 if (*(r + 1) == '.')
4375 tape->firmware_revision_num = (*r - '0') * 100 + (*(r + 2) - '0') * 10 + *(r + 3) - '0'; 3572 tape->firmware_revision_num = (*r - '0') * 100 +
4376 printk(KERN_INFO "ide-tape: %s <-> %s: %s %s rev %s\n", drive->name, tape->name, tape->vendor_id, tape->product_id, tape->firmware_revision); 3573 (*(r + 2) - '0') * 10 + *(r + 3) - '0';
3574 printk(KERN_INFO "ide-tape: %s <-> %s: %s %s rev %s\n",
3575 drive->name, tape->name, tape->vendor_id,
3576 tape->product_id, tape->firmware_revision);
4377} 3577}
4378 3578
4379/* 3579/*
4380 * idetape_get_mode_sense_results asks the tape about its various 3580 * Ask the tape about its various parameters. In particular, we will adjust our
4381 * parameters. In particular, we will adjust our data transfer buffer 3581 * data transfer buffer size to the recommended value as returned by the tape.
4382 * size to the recommended value as returned by the tape.
4383 */ 3582 */
4384static void idetape_get_mode_sense_results (ide_drive_t *drive) 3583static void idetape_get_mode_sense_results (ide_drive_t *drive)
4385{ 3584{
4386 idetape_tape_t *tape = drive->driver_data; 3585 idetape_tape_t *tape = drive->driver_data;
4387 idetape_pc_t pc; 3586 idetape_pc_t pc;
4388 idetape_mode_parameter_header_t *header; 3587 u8 *caps;
4389 idetape_capabilities_page_t *capabilities; 3588 u8 speed, max_speed;
4390 3589
4391 idetape_create_mode_sense_cmd(&pc, IDETAPE_CAPABILITIES_PAGE); 3590 idetape_create_mode_sense_cmd(&pc, IDETAPE_CAPABILITIES_PAGE);
4392 if (idetape_queue_pc_tail(drive, &pc)) { 3591 if (idetape_queue_pc_tail(drive, &pc)) {
4393 printk(KERN_ERR "ide-tape: Can't get tape parameters - assuming some default values\n"); 3592 printk(KERN_ERR "ide-tape: Can't get tape parameters - assuming"
3593 " some default values\n");
4394 tape->tape_block_size = 512; 3594 tape->tape_block_size = 512;
4395 tape->capabilities.ctl = 52; 3595 put_unaligned(52, (u16 *)&tape->caps[12]);
4396 tape->capabilities.speed = 450; 3596 put_unaligned(540, (u16 *)&tape->caps[14]);
4397 tape->capabilities.buffer_size = 6 * 52; 3597 put_unaligned(6*52, (u16 *)&tape->caps[16]);
4398 return; 3598 return;
4399 } 3599 }
4400 header = (idetape_mode_parameter_header_t *) pc.buffer; 3600 caps = pc.buffer + 4 + pc.buffer[3];
4401 capabilities = (idetape_capabilities_page_t *) (pc.buffer + sizeof(idetape_mode_parameter_header_t) + header->bdl);
4402 3601
4403 capabilities->max_speed = ntohs(capabilities->max_speed); 3602 /* convert to host order and save for later use */
4404 capabilities->ctl = ntohs(capabilities->ctl); 3603 speed = be16_to_cpu(*(u16 *)&caps[14]);
4405 capabilities->speed = ntohs(capabilities->speed); 3604 max_speed = be16_to_cpu(*(u16 *)&caps[8]);
4406 capabilities->buffer_size = ntohs(capabilities->buffer_size);
4407 3605
4408 if (!capabilities->speed) { 3606 put_unaligned(max_speed, (u16 *)&caps[8]);
4409 printk(KERN_INFO "ide-tape: %s: overriding capabilities->speed (assuming 650KB/sec)\n", drive->name); 3607 put_unaligned(be16_to_cpu(*(u16 *)&caps[12]), (u16 *)&caps[12]);
4410 capabilities->speed = 650; 3608 put_unaligned(speed, (u16 *)&caps[14]);
3609 put_unaligned(be16_to_cpu(*(u16 *)&caps[16]), (u16 *)&caps[16]);
3610
3611 if (!speed) {
3612 printk(KERN_INFO "ide-tape: %s: invalid tape speed "
3613 "(assuming 650KB/sec)\n", drive->name);
3614 put_unaligned(650, (u16 *)&caps[14]);
4411 } 3615 }
4412 if (!capabilities->max_speed) { 3616 if (!max_speed) {
4413 printk(KERN_INFO "ide-tape: %s: overriding capabilities->max_speed (assuming 650KB/sec)\n", drive->name); 3617 printk(KERN_INFO "ide-tape: %s: invalid max_speed "
4414 capabilities->max_speed = 650; 3618 "(assuming 650KB/sec)\n", drive->name);
3619 put_unaligned(650, (u16 *)&caps[8]);
4415 } 3620 }
4416 3621
4417 tape->capabilities = *capabilities; /* Save us a copy */ 3622 memcpy(&tape->caps, caps, 20);
4418 if (capabilities->blk512) 3623 if (caps[7] & 0x02)
4419 tape->tape_block_size = 512; 3624 tape->tape_block_size = 512;
4420 else if (capabilities->blk1024) 3625 else if (caps[7] & 0x04)
4421 tape->tape_block_size = 1024; 3626 tape->tape_block_size = 1024;
4422
4423#if IDETAPE_DEBUG_INFO
4424 printk(KERN_INFO "ide-tape: Dumping the results of the MODE SENSE packet command\n");
4425 printk(KERN_INFO "ide-tape: Mode Parameter Header:\n");
4426 printk(KERN_INFO "ide-tape: Mode Data Length - %d\n",header->mode_data_length);
4427 printk(KERN_INFO "ide-tape: Medium Type - %d\n",header->medium_type);
4428 printk(KERN_INFO "ide-tape: Device Specific Parameter - %d\n",header->dsp);
4429 printk(KERN_INFO "ide-tape: Block Descriptor Length - %d\n",header->bdl);
4430
4431 printk(KERN_INFO "ide-tape: Capabilities and Mechanical Status Page:\n");
4432 printk(KERN_INFO "ide-tape: Page code - %d\n",capabilities->page_code);
4433 printk(KERN_INFO "ide-tape: Page length - %d\n",capabilities->page_length);
4434 printk(KERN_INFO "ide-tape: Read only - %s\n",capabilities->ro ? "Yes":"No");
4435 printk(KERN_INFO "ide-tape: Supports reverse space - %s\n",capabilities->sprev ? "Yes":"No");
4436 printk(KERN_INFO "ide-tape: Supports erase initiated formatting - %s\n",capabilities->efmt ? "Yes":"No");
4437 printk(KERN_INFO "ide-tape: Supports QFA two Partition format - %s\n",capabilities->qfa ? "Yes":"No");
4438 printk(KERN_INFO "ide-tape: Supports locking the medium - %s\n",capabilities->lock ? "Yes":"No");
4439 printk(KERN_INFO "ide-tape: The volume is currently locked - %s\n",capabilities->locked ? "Yes":"No");
4440 printk(KERN_INFO "ide-tape: The device defaults in the prevent state - %s\n",capabilities->prevent ? "Yes":"No");
4441 printk(KERN_INFO "ide-tape: Supports ejecting the medium - %s\n",capabilities->eject ? "Yes":"No");
4442 printk(KERN_INFO "ide-tape: Supports error correction - %s\n",capabilities->ecc ? "Yes":"No");
4443 printk(KERN_INFO "ide-tape: Supports data compression - %s\n",capabilities->cmprs ? "Yes":"No");
4444 printk(KERN_INFO "ide-tape: Supports 512 bytes block size - %s\n",capabilities->blk512 ? "Yes":"No");
4445 printk(KERN_INFO "ide-tape: Supports 1024 bytes block size - %s\n",capabilities->blk1024 ? "Yes":"No");
4446 printk(KERN_INFO "ide-tape: Supports 32768 bytes block size / Restricted byte count for PIO transfers - %s\n",capabilities->blk32768 ? "Yes":"No");
4447 printk(KERN_INFO "ide-tape: Maximum supported speed in KBps - %d\n",capabilities->max_speed);
4448 printk(KERN_INFO "ide-tape: Continuous transfer limits in blocks - %d\n",capabilities->ctl);
4449 printk(KERN_INFO "ide-tape: Current speed in KBps - %d\n",capabilities->speed);
4450 printk(KERN_INFO "ide-tape: Buffer size - %d\n",capabilities->buffer_size*512);
4451#endif /* IDETAPE_DEBUG_INFO */
4452}
4453
4454/*
4455 * ide_get_blocksize_from_block_descriptor does a mode sense page 0 with block descriptor
4456 * and if it succeeds sets the tape block size with the reported value
4457 */
4458static void idetape_get_blocksize_from_block_descriptor(ide_drive_t *drive)
4459{
4460
4461 idetape_tape_t *tape = drive->driver_data;
4462 idetape_pc_t pc;
4463 idetape_mode_parameter_header_t *header;
4464 idetape_parameter_block_descriptor_t *block_descrp;
4465
4466 idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
4467 if (idetape_queue_pc_tail(drive, &pc)) {
4468 printk(KERN_ERR "ide-tape: Can't get block descriptor\n");
4469 if (tape->tape_block_size == 0) {
4470 printk(KERN_WARNING "ide-tape: Cannot deal with zero block size, assume 32k\n");
4471 tape->tape_block_size = 32768;
4472 }
4473 return;
4474 }
4475 header = (idetape_mode_parameter_header_t *) pc.buffer;
4476 block_descrp = (idetape_parameter_block_descriptor_t *) (pc.buffer + sizeof(idetape_mode_parameter_header_t));
4477 tape->tape_block_size =( block_descrp->length[0]<<16) + (block_descrp->length[1]<<8) + block_descrp->length[2];
4478 tape->drv_write_prot = (header->dsp & 0x80) >> 7;
4479
4480#if IDETAPE_DEBUG_INFO
4481 printk(KERN_INFO "ide-tape: Adjusted block size - %d\n", tape->tape_block_size);
4482#endif /* IDETAPE_DEBUG_INFO */
4483} 3627}
4484 3628
4485#ifdef CONFIG_IDE_PROC_FS 3629#ifdef CONFIG_IDE_PROC_FS
@@ -4490,13 +3634,15 @@ static void idetape_add_settings (ide_drive_t *drive)
4490/* 3634/*
4491 * drive setting name read/write data type min max mul_factor div_factor data pointer set function 3635 * drive setting name read/write data type min max mul_factor div_factor data pointer set function
4492 */ 3636 */
4493 ide_add_setting(drive, "buffer", SETTING_READ, TYPE_SHORT, 0, 0xffff, 1, 2, &tape->capabilities.buffer_size, NULL); 3637 ide_add_setting(drive, "buffer", SETTING_READ, TYPE_SHORT, 0, 0xffff,
3638 1, 2, (u16 *)&tape->caps[16], NULL);
4494 ide_add_setting(drive, "pipeline_min", SETTING_RW, TYPE_INT, 1, 0xffff, tape->stage_size / 1024, 1, &tape->min_pipeline, NULL); 3639 ide_add_setting(drive, "pipeline_min", SETTING_RW, TYPE_INT, 1, 0xffff, tape->stage_size / 1024, 1, &tape->min_pipeline, NULL);
4495 ide_add_setting(drive, "pipeline", SETTING_RW, TYPE_INT, 1, 0xffff, tape->stage_size / 1024, 1, &tape->max_stages, NULL); 3640 ide_add_setting(drive, "pipeline", SETTING_RW, TYPE_INT, 1, 0xffff, tape->stage_size / 1024, 1, &tape->max_stages, NULL);
4496 ide_add_setting(drive, "pipeline_max", SETTING_RW, TYPE_INT, 1, 0xffff, tape->stage_size / 1024, 1, &tape->max_pipeline, NULL); 3641 ide_add_setting(drive, "pipeline_max", SETTING_RW, TYPE_INT, 1, 0xffff, tape->stage_size / 1024, 1, &tape->max_pipeline, NULL);
4497 ide_add_setting(drive, "pipeline_used", SETTING_READ, TYPE_INT, 0, 0xffff, tape->stage_size / 1024, 1, &tape->nr_stages, NULL); 3642 ide_add_setting(drive, "pipeline_used", SETTING_READ, TYPE_INT, 0, 0xffff, tape->stage_size / 1024, 1, &tape->nr_stages, NULL);
4498 ide_add_setting(drive, "pipeline_pending", SETTING_READ, TYPE_INT, 0, 0xffff, tape->stage_size / 1024, 1, &tape->nr_pending_stages, NULL); 3643 ide_add_setting(drive, "pipeline_pending", SETTING_READ, TYPE_INT, 0, 0xffff, tape->stage_size / 1024, 1, &tape->nr_pending_stages, NULL);
4499 ide_add_setting(drive, "speed", SETTING_READ, TYPE_SHORT, 0, 0xffff, 1, 1, &tape->capabilities.speed, NULL); 3644 ide_add_setting(drive, "speed", SETTING_READ, TYPE_SHORT, 0, 0xffff,
3645 1, 1, (u16 *)&tape->caps[14], NULL);
4500 ide_add_setting(drive, "stage", SETTING_READ, TYPE_INT, 0, 0xffff, 1, 1024, &tape->stage_size, NULL); 3646 ide_add_setting(drive, "stage", SETTING_READ, TYPE_INT, 0, 0xffff, 1, 1024, &tape->stage_size, NULL);
4501 ide_add_setting(drive, "tdsc", SETTING_RW, TYPE_INT, IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX, 1000, HZ, &tape->best_dsc_rw_frequency, NULL); 3647 ide_add_setting(drive, "tdsc", SETTING_RW, TYPE_INT, IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX, 1000, HZ, &tape->best_dsc_rw_frequency, NULL);
4502 ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL); 3648 ide_add_setting(drive, "dsc_overlap", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
@@ -4528,6 +3674,7 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
4528 struct idetape_id_gcw gcw; 3674 struct idetape_id_gcw gcw;
4529 int stage_size; 3675 int stage_size;
4530 struct sysinfo si; 3676 struct sysinfo si;
3677 u16 *ctl = (u16 *)&tape->caps[12];
4531 3678
4532 spin_lock_init(&tape->spinlock); 3679 spin_lock_init(&tape->spinlock);
4533 drive->dsc_overlap = 1; 3680 drive->dsc_overlap = 1;
@@ -4555,13 +3702,13 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
4555 3702
4556 idetape_get_inquiry_results(drive); 3703 idetape_get_inquiry_results(drive);
4557 idetape_get_mode_sense_results(drive); 3704 idetape_get_mode_sense_results(drive);
4558 idetape_get_blocksize_from_block_descriptor(drive); 3705 ide_tape_get_bsize_from_bdesc(drive);
4559 tape->user_bs_factor = 1; 3706 tape->user_bs_factor = 1;
4560 tape->stage_size = tape->capabilities.ctl * tape->tape_block_size; 3707 tape->stage_size = *ctl * tape->tape_block_size;
4561 while (tape->stage_size > 0xffff) { 3708 while (tape->stage_size > 0xffff) {
4562 printk(KERN_NOTICE "ide-tape: decreasing stage size\n"); 3709 printk(KERN_NOTICE "ide-tape: decreasing stage size\n");
4563 tape->capabilities.ctl /= 2; 3710 *ctl /= 2;
4564 tape->stage_size = tape->capabilities.ctl * tape->tape_block_size; 3711 tape->stage_size = *ctl * tape->tape_block_size;
4565 } 3712 }
4566 stage_size = tape->stage_size; 3713 stage_size = tape->stage_size;
4567 tape->pages_per_stage = stage_size / PAGE_SIZE; 3714 tape->pages_per_stage = stage_size / PAGE_SIZE;
@@ -4570,11 +3717,8 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
4570 tape->excess_bh_size = PAGE_SIZE - stage_size % PAGE_SIZE; 3717 tape->excess_bh_size = PAGE_SIZE - stage_size % PAGE_SIZE;
4571 } 3718 }
4572 3719
4573 /* 3720 /* Select the "best" DSC read/write polling freq and pipeline size. */
4574 * Select the "best" DSC read/write polling frequency 3721 speed = max(*(u16 *)&tape->caps[14], *(u16 *)&tape->caps[8]);
4575 * and pipeline size.
4576 */
4577 speed = max(tape->capabilities.speed, tape->capabilities.max_speed);
4578 3722
4579 tape->max_stages = speed * 1000 * 10 / tape->stage_size; 3723 tape->max_stages = speed * 1000 * 10 / tape->stage_size;
4580 3724
@@ -4591,7 +3735,7 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
4591 tape->max_stages = tape->min_pipeline = tape->max_pipeline = 1; 3735 tape->max_stages = tape->min_pipeline = tape->max_pipeline = 1;
4592 3736
4593 t1 = (tape->stage_size * HZ) / (speed * 1000); 3737 t1 = (tape->stage_size * HZ) / (speed * 1000);
4594 tmid = (tape->capabilities.buffer_size * 32 * HZ) / (speed * 125); 3738 tmid = (*(u16 *)&tape->caps[16] * 32 * HZ) / (speed * 125);
4595 tn = (IDETAPE_FIFO_THRESHOLD * tape->stage_size * HZ) / (speed * 1000); 3739 tn = (IDETAPE_FIFO_THRESHOLD * tape->stage_size * HZ) / (speed * 1000);
4596 3740
4597 if (tape->max_stages) 3741 if (tape->max_stages)
@@ -4606,8 +3750,8 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
4606 tape->best_dsc_rw_frequency = max_t(unsigned long, min_t(unsigned long, t, IDETAPE_DSC_RW_MAX), IDETAPE_DSC_RW_MIN); 3750 tape->best_dsc_rw_frequency = max_t(unsigned long, min_t(unsigned long, t, IDETAPE_DSC_RW_MAX), IDETAPE_DSC_RW_MIN);
4607 printk(KERN_INFO "ide-tape: %s <-> %s: %dKBps, %d*%dkB buffer, " 3751 printk(KERN_INFO "ide-tape: %s <-> %s: %dKBps, %d*%dkB buffer, "
4608 "%dkB pipeline, %lums tDSC%s\n", 3752 "%dkB pipeline, %lums tDSC%s\n",
4609 drive->name, tape->name, tape->capabilities.speed, 3753 drive->name, tape->name, *(u16 *)&tape->caps[14],
4610 (tape->capabilities.buffer_size * 512) / tape->stage_size, 3754 (*(u16 *)&tape->caps[16] * 512) / tape->stage_size,
4611 tape->stage_size / 1024, 3755 tape->stage_size / 1024,
4612 tape->max_stages * tape->stage_size / 1024, 3756 tape->max_stages * tape->stage_size / 1024,
4613 tape->best_dsc_rw_frequency * 1000 / HZ, 3757 tape->best_dsc_rw_frequency * 1000 / HZ,
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
index 16a9a581d089..4e1da1c78cb5 100644
--- a/drivers/ide/ide-taskfile.c
+++ b/drivers/ide/ide-taskfile.c
@@ -755,6 +755,7 @@ int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
755 u8 args[4], xfer_rate = 0; 755 u8 args[4], xfer_rate = 0;
756 ide_task_t tfargs; 756 ide_task_t tfargs;
757 struct ide_taskfile *tf = &tfargs.tf; 757 struct ide_taskfile *tf = &tfargs.tf;
758 struct hd_driveid *id = drive->id;
758 759
759 if (NULL == (void *) arg) { 760 if (NULL == (void *) arg) {
760 struct request rq; 761 struct request rq;
@@ -792,10 +793,16 @@ int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
792 return -ENOMEM; 793 return -ENOMEM;
793 } 794 }
794 795
795 if (set_transfer(drive, &tfargs)) { 796 if (tf->command == WIN_SETFEATURES &&
797 tf->feature == SETFEATURES_XFER &&
798 tf->nsect >= XFER_SW_DMA_0 &&
799 (id->dma_ultra || id->dma_mword || id->dma_1word)) {
796 xfer_rate = args[1]; 800 xfer_rate = args[1];
797 if (ide_ata66_check(drive, &tfargs)) 801 if (tf->nsect > XFER_UDMA_2 && !eighty_ninty_three(drive)) {
802 printk(KERN_WARNING "%s: UDMA speeds >UDMA33 cannot "
803 "be set\n", drive->name);
798 goto abort; 804 goto abort;
805 }
799 } 806 }
800 807
801 err = ide_raw_taskfile(drive, &tfargs, buf, args[3]); 808 err = ide_raw_taskfile(drive, &tfargs, buf, args[3]);
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index ab9ca2b5b66c..ac6136001615 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -499,6 +499,8 @@ void ide_remove_port_from_hwgroup(ide_hwif_t *hwif)
499/** 499/**
500 * ide_unregister - free an IDE interface 500 * ide_unregister - free an IDE interface
501 * @index: index of interface (will change soon to a pointer) 501 * @index: index of interface (will change soon to a pointer)
502 * @init_default: init default hwif flag
503 * @restore: restore hwif flag
502 * 504 *
503 * Perform the final unregister of an IDE interface. At the moment 505 * Perform the final unregister of an IDE interface. At the moment
504 * we don't refcount interfaces so this will also get split up. 506 * we don't refcount interfaces so this will also get split up.
@@ -518,7 +520,7 @@ void ide_remove_port_from_hwgroup(ide_hwif_t *hwif)
518 * This is raving bonkers. 520 * This is raving bonkers.
519 */ 521 */
520 522
521void ide_unregister(unsigned int index) 523void ide_unregister(unsigned int index, int init_default, int restore)
522{ 524{
523 ide_drive_t *drive; 525 ide_drive_t *drive;
524 ide_hwif_t *hwif, *g; 526 ide_hwif_t *hwif, *g;
@@ -602,9 +604,12 @@ void ide_unregister(unsigned int index)
602 604
603 /* restore hwif data to pristine status */ 605 /* restore hwif data to pristine status */
604 ide_init_port_data(hwif, index); 606 ide_init_port_data(hwif, index);
605 init_hwif_default(hwif, index);
606 607
607 ide_hwif_restore(hwif, &tmp_hwif); 608 if (init_default)
609 init_hwif_default(hwif, index);
610
611 if (restore)
612 ide_hwif_restore(hwif, &tmp_hwif);
608 613
609abort: 614abort:
610 spin_unlock_irq(&ide_lock); 615 spin_unlock_irq(&ide_lock);
@@ -678,6 +683,31 @@ void ide_init_port_hw(ide_hwif_t *hwif, hw_regs_t *hw)
678} 683}
679EXPORT_SYMBOL_GPL(ide_init_port_hw); 684EXPORT_SYMBOL_GPL(ide_init_port_hw);
680 685
686ide_hwif_t *ide_deprecated_find_port(unsigned long base)
687{
688 ide_hwif_t *hwif;
689 int i;
690
691 for (i = 0; i < MAX_HWIFS; i++) {
692 hwif = &ide_hwifs[i];
693 if (hwif->io_ports[IDE_DATA_OFFSET] == base)
694 goto found;
695 }
696
697 for (i = 0; i < MAX_HWIFS; i++) {
698 hwif = &ide_hwifs[i];
699 if (hwif->hold)
700 continue;
701 if (!hwif->present && hwif->mate == NULL)
702 goto found;
703 }
704
705 hwif = NULL;
706found:
707 return hwif;
708}
709EXPORT_SYMBOL_GPL(ide_deprecated_find_port);
710
681/** 711/**
682 * ide_register_hw - register IDE interface 712 * ide_register_hw - register IDE interface
683 * @hw: hardware registers 713 * @hw: hardware registers
@@ -697,38 +727,26 @@ int ide_register_hw(hw_regs_t *hw, void (*quirkproc)(ide_drive_t *),
697 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; 727 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
698 728
699 do { 729 do {
700 for (index = 0; index < MAX_HWIFS; ++index) { 730 hwif = ide_deprecated_find_port(hw->io_ports[IDE_DATA_OFFSET]);
701 hwif = &ide_hwifs[index]; 731 index = hwif->index;
702 if (hwif->io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET]) 732 if (hwif)
703 goto found; 733 goto found;
704 }
705 for (index = 0; index < MAX_HWIFS; ++index) {
706 hwif = &ide_hwifs[index];
707 if (hwif->hold)
708 continue;
709 if (!hwif->present && hwif->mate == NULL)
710 goto found;
711 }
712 for (index = 0; index < MAX_HWIFS; index++) 734 for (index = 0; index < MAX_HWIFS; index++)
713 ide_unregister(index); 735 ide_unregister(index, 1, 1);
714 } while (retry--); 736 } while (retry--);
715 return -1; 737 return -1;
716found: 738found:
717 if (hwif->present) 739 if (hwif->present)
718 ide_unregister(index); 740 ide_unregister(index, 0, 1);
719 else if (!hwif->hold) { 741 else if (!hwif->hold)
720 ide_init_port_data(hwif, index); 742 ide_init_port_data(hwif, index);
721 init_hwif_default(hwif, index);
722 }
723 if (hwif->present)
724 return -1;
725 743
726 ide_init_port_hw(hwif, hw); 744 ide_init_port_hw(hwif, hw);
727 hwif->quirkproc = quirkproc; 745 hwif->quirkproc = quirkproc;
728 746
729 idx[0] = index; 747 idx[0] = index;
730 748
731 ide_device_add(idx); 749 ide_device_add(idx, NULL);
732 750
733 if (hwifp) 751 if (hwifp)
734 *hwifp = hwif; 752 *hwifp = hwif;
@@ -791,10 +809,6 @@ int set_io_32bit(ide_drive_t *drive, int arg)
791 return -EBUSY; 809 return -EBUSY;
792 810
793 drive->io_32bit = arg; 811 drive->io_32bit = arg;
794#ifdef CONFIG_BLK_DEV_DTC2278
795 if (HWIF(drive)->chipset == ide_dtc2278)
796 HWIF(drive)->drives[!drive->select.b.unit].io_32bit = arg;
797#endif /* CONFIG_BLK_DEV_DTC2278 */
798 812
799 spin_unlock_irq(&ide_lock); 813 spin_unlock_irq(&ide_lock);
800 814
@@ -1021,11 +1035,8 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
1021 case HDIO_GET_NICE: 1035 case HDIO_GET_NICE:
1022 return put_user(drive->dsc_overlap << IDE_NICE_DSC_OVERLAP | 1036 return put_user(drive->dsc_overlap << IDE_NICE_DSC_OVERLAP |
1023 drive->atapi_overlap << IDE_NICE_ATAPI_OVERLAP | 1037 drive->atapi_overlap << IDE_NICE_ATAPI_OVERLAP |
1024 drive->nice0 << IDE_NICE_0 | 1038 drive->nice1 << IDE_NICE_1,
1025 drive->nice1 << IDE_NICE_1 |
1026 drive->nice2 << IDE_NICE_2,
1027 (long __user *) arg); 1039 (long __user *) arg);
1028
1029#ifdef CONFIG_IDE_TASK_IOCTL 1040#ifdef CONFIG_IDE_TASK_IOCTL
1030 case HDIO_DRIVE_TASKFILE: 1041 case HDIO_DRIVE_TASKFILE:
1031 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO)) 1042 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
@@ -1066,7 +1077,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
1066 case HDIO_UNREGISTER_HWIF: 1077 case HDIO_UNREGISTER_HWIF:
1067 if (!capable(CAP_SYS_RAWIO)) return -EACCES; 1078 if (!capable(CAP_SYS_RAWIO)) return -EACCES;
1068 /* (arg > MAX_HWIFS) checked in function */ 1079 /* (arg > MAX_HWIFS) checked in function */
1069 ide_unregister(arg); 1080 ide_unregister(arg, 1, 1);
1070 return 0; 1081 return 0;
1071 case HDIO_SET_NICE: 1082 case HDIO_SET_NICE:
1072 if (!capable(CAP_SYS_ADMIN)) return -EACCES; 1083 if (!capable(CAP_SYS_ADMIN)) return -EACCES;
@@ -1711,7 +1722,7 @@ void __exit cleanup_module (void)
1711 int index; 1722 int index;
1712 1723
1713 for (index = 0; index < MAX_HWIFS; ++index) 1724 for (index = 0; index < MAX_HWIFS; ++index)
1714 ide_unregister(index); 1725 ide_unregister(index, 0, 0);
1715 1726
1716 proc_ide_destroy(); 1727 proc_ide_destroy();
1717 1728
diff --git a/drivers/ide/legacy/ali14xx.c b/drivers/ide/legacy/ali14xx.c
index e3ea2096804a..d4d1a6bea599 100644
--- a/drivers/ide/legacy/ali14xx.c
+++ b/drivers/ide/legacy/ali14xx.c
@@ -191,9 +191,14 @@ static int __init initRegisters (void) {
191 return t; 191 return t;
192} 192}
193 193
194static const struct ide_port_info ali14xx_port_info = {
195 .chipset = ide_ali14xx,
196 .host_flags = IDE_HFLAG_NO_DMA | IDE_HFLAG_NO_AUTOTUNE,
197 .pio_mask = ATA_PIO4,
198};
199
194static int __init ali14xx_probe(void) 200static int __init ali14xx_probe(void)
195{ 201{
196 ide_hwif_t *hwif, *mate;
197 static u8 idx[4] = { 0, 1, 0xff, 0xff }; 202 static u8 idx[4] = { 0, 1, 0xff, 0xff };
198 203
199 printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n", 204 printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n",
@@ -205,21 +210,10 @@ static int __init ali14xx_probe(void)
205 return 1; 210 return 1;
206 } 211 }
207 212
208 hwif = &ide_hwifs[0]; 213 ide_hwifs[0].set_pio_mode = &ali14xx_set_pio_mode;
209 mate = &ide_hwifs[1]; 214 ide_hwifs[1].set_pio_mode = &ali14xx_set_pio_mode;
210
211 hwif->chipset = ide_ali14xx;
212 hwif->pio_mask = ATA_PIO4;
213 hwif->set_pio_mode = &ali14xx_set_pio_mode;
214 hwif->mate = mate;
215
216 mate->chipset = ide_ali14xx;
217 mate->pio_mask = ATA_PIO4;
218 mate->set_pio_mode = &ali14xx_set_pio_mode;
219 mate->mate = hwif;
220 mate->channel = 1;
221 215
222 ide_device_add(idx); 216 ide_device_add(idx, &ali14xx_port_info);
223 217
224 return 0; 218 return 0;
225} 219}
diff --git a/drivers/ide/legacy/buddha.c b/drivers/ide/legacy/buddha.c
index dd3d198ade47..8bdb79da17e8 100644
--- a/drivers/ide/legacy/buddha.c
+++ b/drivers/ide/legacy/buddha.c
@@ -232,7 +232,7 @@ fail_base2:
232 } 232 }
233 } 233 }
234 234
235 ide_device_add(idx); 235 ide_device_add(idx, NULL);
236 } 236 }
237 237
238 return 0; 238 return 0;
diff --git a/drivers/ide/legacy/dtc2278.c b/drivers/ide/legacy/dtc2278.c
index 611c9705a3ae..73396f70f2b7 100644
--- a/drivers/ide/legacy/dtc2278.c
+++ b/drivers/ide/legacy/dtc2278.c
@@ -84,14 +84,20 @@ static void dtc2278_set_pio_mode(ide_drive_t *drive, const u8 pio)
84 /* Actually we do - there is a data sheet available for the 84 /* Actually we do - there is a data sheet available for the
85 Winbond but does anyone actually care */ 85 Winbond but does anyone actually care */
86 } 86 }
87
88 /*
89 * 32bit I/O has to be enabled for *both* drives at the same time.
90 */
91 drive->io_32bit = 1;
92 HWIF(drive)->drives[!drive->select.b.unit].io_32bit = 1;
93} 87}
94 88
89static const struct ide_port_info dtc2278_port_info __initdata = {
90 .chipset = ide_dtc2278,
91 .host_flags = IDE_HFLAG_SERIALIZE |
92 IDE_HFLAG_NO_UNMASK_IRQS |
93 IDE_HFLAG_IO_32BIT |
94 /* disallow ->io_32bit changes */
95 IDE_HFLAG_NO_IO_32BIT |
96 IDE_HFLAG_NO_DMA |
97 IDE_HFLAG_NO_AUTOTUNE,
98 .pio_mask = ATA_PIO4,
99};
100
95static int __init dtc2278_probe(void) 101static int __init dtc2278_probe(void)
96{ 102{
97 unsigned long flags; 103 unsigned long flags;
@@ -122,23 +128,9 @@ static int __init dtc2278_probe(void)
122#endif 128#endif
123 local_irq_restore(flags); 129 local_irq_restore(flags);
124 130
125 hwif->serialized = 1;
126 hwif->chipset = ide_dtc2278;
127 hwif->pio_mask = ATA_PIO4;
128 hwif->set_pio_mode = &dtc2278_set_pio_mode; 131 hwif->set_pio_mode = &dtc2278_set_pio_mode;
129 hwif->drives[0].no_unmask = 1; 132
130 hwif->drives[1].no_unmask = 1; 133 ide_device_add(idx, &dtc2278_port_info);
131 hwif->mate = mate;
132
133 mate->serialized = 1;
134 mate->chipset = ide_dtc2278;
135 mate->pio_mask = ATA_PIO4;
136 mate->drives[0].no_unmask = 1;
137 mate->drives[1].no_unmask = 1;
138 mate->mate = hwif;
139 mate->channel = 1;
140
141 ide_device_add(idx);
142 134
143 return 0; 135 return 0;
144} 136}
diff --git a/drivers/ide/legacy/falconide.c b/drivers/ide/legacy/falconide.c
index c9bd6bfb1f3b..85b69a82825f 100644
--- a/drivers/ide/legacy/falconide.c
+++ b/drivers/ide/legacy/falconide.c
@@ -83,7 +83,7 @@ static int __init falconide_init(void)
83 ide_init_port_data(hwif, index); 83 ide_init_port_data(hwif, index);
84 ide_init_port_hw(hwif, &hw); 84 ide_init_port_hw(hwif, &hw);
85 85
86 ide_device_add(idx); 86 ide_device_add(idx, NULL);
87 } 87 }
88 } 88 }
89 89
diff --git a/drivers/ide/legacy/gayle.c b/drivers/ide/legacy/gayle.c
index f67c51a2c84a..fc29ce75aff1 100644
--- a/drivers/ide/legacy/gayle.c
+++ b/drivers/ide/legacy/gayle.c
@@ -186,7 +186,7 @@ found:
186 release_mem_region(res_start, res_n); 186 release_mem_region(res_start, res_n);
187 } 187 }
188 188
189 ide_device_add(idx); 189 ide_device_add(idx, NULL);
190 190
191 return 0; 191 return 0;
192} 192}
diff --git a/drivers/ide/legacy/ht6560b.c b/drivers/ide/legacy/ht6560b.c
index 57bc15cddca0..02d12c74764a 100644
--- a/drivers/ide/legacy/ht6560b.c
+++ b/drivers/ide/legacy/ht6560b.c
@@ -300,16 +300,36 @@ static void ht6560b_set_pio_mode(ide_drive_t *drive, const u8 pio)
300#endif 300#endif
301} 301}
302 302
303static void __init ht6560b_port_init_devs(ide_hwif_t *hwif)
304{
305 /* Setting default configurations for drives. */
306 int t = (HT_CONFIG_DEFAULT << 8) | HT_TIMING_DEFAULT;
307
308 if (hwif->channel)
309 t |= (HT_SECONDARY_IF << 8);
310
311 hwif->drives[0].drive_data = t;
312 hwif->drives[1].drive_data = t;
313}
314
303int probe_ht6560b = 0; 315int probe_ht6560b = 0;
304 316
305module_param_named(probe, probe_ht6560b, bool, 0); 317module_param_named(probe, probe_ht6560b, bool, 0);
306MODULE_PARM_DESC(probe, "probe for HT6560B chipset"); 318MODULE_PARM_DESC(probe, "probe for HT6560B chipset");
307 319
320static const struct ide_port_info ht6560b_port_info __initdata = {
321 .chipset = ide_ht6560b,
322 .host_flags = IDE_HFLAG_SERIALIZE | /* is this needed? */
323 IDE_HFLAG_NO_DMA |
324 IDE_HFLAG_NO_AUTOTUNE |
325 IDE_HFLAG_ABUSE_PREFETCH,
326 .pio_mask = ATA_PIO5,
327};
328
308static int __init ht6560b_init(void) 329static int __init ht6560b_init(void)
309{ 330{
310 ide_hwif_t *hwif, *mate; 331 ide_hwif_t *hwif, *mate;
311 static u8 idx[4] = { 0, 1, 0xff, 0xff }; 332 static u8 idx[4] = { 0, 1, 0xff, 0xff };
312 int t;
313 333
314 if (probe_ht6560b == 0) 334 if (probe_ht6560b == 0)
315 return -ENODEV; 335 return -ENODEV;
@@ -328,36 +348,16 @@ static int __init ht6560b_init(void)
328 goto release_region; 348 goto release_region;
329 } 349 }
330 350
331 hwif->chipset = ide_ht6560b;
332 hwif->selectproc = &ht6560b_selectproc; 351 hwif->selectproc = &ht6560b_selectproc;
333 hwif->host_flags = IDE_HFLAG_ABUSE_PREFETCH;
334 hwif->pio_mask = ATA_PIO5;
335 hwif->set_pio_mode = &ht6560b_set_pio_mode; 352 hwif->set_pio_mode = &ht6560b_set_pio_mode;
336 hwif->serialized = 1; /* is this needed? */
337 hwif->mate = mate;
338 353
339 mate->chipset = ide_ht6560b;
340 mate->selectproc = &ht6560b_selectproc; 354 mate->selectproc = &ht6560b_selectproc;
341 mate->host_flags = IDE_HFLAG_ABUSE_PREFETCH;
342 mate->pio_mask = ATA_PIO5;
343 mate->set_pio_mode = &ht6560b_set_pio_mode; 355 mate->set_pio_mode = &ht6560b_set_pio_mode;
344 mate->serialized = 1; /* is this needed? */
345 mate->mate = hwif;
346 mate->channel = 1;
347
348 /*
349 * Setting default configurations for drives
350 */
351 t = (HT_CONFIG_DEFAULT << 8);
352 t |= HT_TIMING_DEFAULT;
353 hwif->drives[0].drive_data = t;
354 hwif->drives[1].drive_data = t;
355 356
356 t |= (HT_SECONDARY_IF << 8); 357 hwif->port_init_devs = ht6560b_port_init_devs;
357 mate->drives[0].drive_data = t; 358 mate->port_init_devs = ht6560b_port_init_devs;
358 mate->drives[1].drive_data = t;
359 359
360 ide_device_add(idx); 360 ide_device_add(idx, &ht6560b_port_info);
361 361
362 return 0; 362 return 0;
363 363
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c
index 3bd29676ef6a..15ccf6944ae2 100644
--- a/drivers/ide/legacy/ide-cs.c
+++ b/drivers/ide/legacy/ide-cs.c
@@ -145,13 +145,36 @@ static void ide_detach(struct pcmcia_device *link)
145 145
146static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq, struct pcmcia_device *handle) 146static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq, struct pcmcia_device *handle)
147{ 147{
148 ide_hwif_t *hwif;
148 hw_regs_t hw; 149 hw_regs_t hw;
150 int i;
151 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
152
149 memset(&hw, 0, sizeof(hw)); 153 memset(&hw, 0, sizeof(hw));
150 ide_init_hwif_ports(&hw, io, ctl, NULL); 154 ide_std_init_ports(&hw, io, ctl);
151 hw.irq = irq; 155 hw.irq = irq;
152 hw.chipset = ide_pci; 156 hw.chipset = ide_pci;
153 hw.dev = &handle->dev; 157 hw.dev = &handle->dev;
154 return ide_register_hw(&hw, &ide_undecoded_slave, NULL); 158
159 hwif = ide_deprecated_find_port(hw.io_ports[IDE_DATA_OFFSET]);
160 if (hwif == NULL)
161 return -1;
162
163 i = hwif->index;
164
165 if (hwif->present)
166 ide_unregister(i, 0, 0);
167 else if (!hwif->hold)
168 ide_init_port_data(hwif, i);
169
170 ide_init_port_hw(hwif, &hw);
171 hwif->quirkproc = &ide_undecoded_slave;
172
173 idx[0] = i;
174
175 ide_device_add(idx, NULL);
176
177 return hwif->present ? i : -1;
155} 178}
156 179
157/*====================================================================== 180/*======================================================================
@@ -337,7 +360,7 @@ void ide_release(struct pcmcia_device *link)
337 if (info->ndev) { 360 if (info->ndev) {
338 /* FIXME: if this fails we need to queue the cleanup somehow 361 /* FIXME: if this fails we need to queue the cleanup somehow
339 -- need to investigate the required PCMCIA magic */ 362 -- need to investigate the required PCMCIA magic */
340 ide_unregister(info->hd); 363 ide_unregister(info->hd, 0, 0);
341 } 364 }
342 info->ndev = 0; 365 info->ndev = 0;
343 366
diff --git a/drivers/ide/legacy/ide_platform.c b/drivers/ide/legacy/ide_platform.c
index 7c3231a21d17..26c82ce602de 100644
--- a/drivers/ide/legacy/ide_platform.c
+++ b/drivers/ide/legacy/ide_platform.c
@@ -108,7 +108,7 @@ static int __devinit plat_ide_probe(struct platform_device *pdev)
108 108
109 idx[0] = hwif->index; 109 idx[0] = hwif->index;
110 110
111 ide_device_add(idx); 111 ide_device_add(idx, NULL);
112 112
113 platform_set_drvdata(pdev, hwif); 113 platform_set_drvdata(pdev, hwif);
114 114
@@ -122,7 +122,7 @@ static int __devexit plat_ide_remove(struct platform_device *pdev)
122{ 122{
123 ide_hwif_t *hwif = pdev->dev.driver_data; 123 ide_hwif_t *hwif = pdev->dev.driver_data;
124 124
125 ide_unregister(hwif->index); 125 ide_unregister(hwif->index, 0, 0);
126 126
127 return 0; 127 return 0;
128} 128}
diff --git a/drivers/ide/legacy/macide.c b/drivers/ide/legacy/macide.c
index c54d07ff64fe..06df8df857a3 100644
--- a/drivers/ide/legacy/macide.c
+++ b/drivers/ide/legacy/macide.c
@@ -123,19 +123,9 @@ static int __init macide_init(void)
123 ide_init_port_data(hwif, index); 123 ide_init_port_data(hwif, index);
124 ide_init_port_hw(hwif, &hw); 124 ide_init_port_hw(hwif, &hw);
125 125
126 if (macintosh_config->ide_type == MAC_IDE_BABOON &&
127 macintosh_config->ident == MAC_MODEL_PB190) {
128 /* Fix breakage in ide-disk.c: drive capacity */
129 /* is not initialized for drives without a */
130 /* hardware ID, and we can't get that without */
131 /* probing the drive which freezes a 190. */
132 ide_drive_t *drive = &hwif->drives[0];
133 drive->capacity64 = drive->cyl*drive->head*drive->sect;
134 }
135
136 hwif->mmio = 1; 126 hwif->mmio = 1;
137 127
138 ide_device_add(idx); 128 ide_device_add(idx, NULL);
139 } 129 }
140 130
141 return 0; 131 return 0;
diff --git a/drivers/ide/legacy/q40ide.c b/drivers/ide/legacy/q40ide.c
index a9c6b0609c54..2f0b34d892a1 100644
--- a/drivers/ide/legacy/q40ide.c
+++ b/drivers/ide/legacy/q40ide.c
@@ -154,7 +154,7 @@ static int __init q40ide_init(void)
154 } 154 }
155 } 155 }
156 156
157 ide_device_add(idx); 157 ide_device_add(idx, NULL);
158 158
159 return 0; 159 return 0;
160} 160}
diff --git a/drivers/ide/legacy/qd65xx.c b/drivers/ide/legacy/qd65xx.c
index 37534bb483a7..bba29df5f21d 100644
--- a/drivers/ide/legacy/qd65xx.c
+++ b/drivers/ide/legacy/qd65xx.c
@@ -305,18 +305,33 @@ static int __init qd_testreg(int port)
305 * called to setup an ata channel : adjusts attributes & links for tuning 305 * called to setup an ata channel : adjusts attributes & links for tuning
306 */ 306 */
307 307
308static void __init qd_setup(ide_hwif_t *hwif, int base, int config, 308static void __init qd_setup(ide_hwif_t *hwif, int base, int config)
309 unsigned int data0, unsigned int data1)
310{ 309{
311 hwif->chipset = ide_qd65xx;
312 hwif->channel = hwif->index;
313 hwif->select_data = base; 310 hwif->select_data = base;
314 hwif->config_data = config; 311 hwif->config_data = config;
315 hwif->drives[0].drive_data = data0; 312}
316 hwif->drives[1].drive_data = data1; 313
317 hwif->drives[0].io_32bit = 314static void __init qd6500_port_init_devs(ide_hwif_t *hwif)
318 hwif->drives[1].io_32bit = 1; 315{
319 hwif->pio_mask = ATA_PIO4; 316 u8 base = hwif->select_data, config = QD_CONFIG(hwif);
317
318 hwif->drives[0].drive_data = QD6500_DEF_DATA;
319 hwif->drives[1].drive_data = QD6500_DEF_DATA;
320}
321
322static void __init qd6580_port_init_devs(ide_hwif_t *hwif)
323{
324 u16 t1, t2;
325 u8 base = hwif->select_data, config = QD_CONFIG(hwif);
326
327 if (QD_CONTROL(hwif) & QD_CONTR_SEC_DISABLED) {
328 t1 = QD6580_DEF_DATA;
329 t2 = QD6580_DEF_DATA2;
330 } else
331 t2 = t1 = hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA;
332
333 hwif->drives[0].drive_data = t1;
334 hwif->drives[1].drive_data = t2;
320} 335}
321 336
322/* 337/*
@@ -356,6 +371,14 @@ static void __exit qd_unsetup(ide_hwif_t *hwif)
356} 371}
357*/ 372*/
358 373
374static const struct ide_port_info qd65xx_port_info __initdata = {
375 .chipset = ide_qd65xx,
376 .host_flags = IDE_HFLAG_IO_32BIT |
377 IDE_HFLAG_NO_DMA |
378 IDE_HFLAG_NO_AUTOTUNE,
379 .pio_mask = ATA_PIO4,
380};
381
359/* 382/*
360 * qd_probe: 383 * qd_probe:
361 * 384 *
@@ -393,13 +416,14 @@ static int __init qd_probe(int base)
393 return 1; 416 return 1;
394 } 417 }
395 418
396 qd_setup(hwif, base, config, QD6500_DEF_DATA, QD6500_DEF_DATA); 419 qd_setup(hwif, base, config);
397 420
421 hwif->port_init_devs = qd6500_port_init_devs;
398 hwif->set_pio_mode = &qd6500_set_pio_mode; 422 hwif->set_pio_mode = &qd6500_set_pio_mode;
399 423
400 idx[0] = unit; 424 idx[unit] = unit;
401 425
402 ide_device_add(idx); 426 ide_device_add(idx, &qd65xx_port_info);
403 427
404 return 1; 428 return 1;
405 } 429 }
@@ -426,14 +450,15 @@ static int __init qd_probe(int base)
426 hwif = &ide_hwifs[unit]; 450 hwif = &ide_hwifs[unit];
427 printk(KERN_INFO "%s: qd6580: single IDE board\n", 451 printk(KERN_INFO "%s: qd6580: single IDE board\n",
428 hwif->name); 452 hwif->name);
429 qd_setup(hwif, base, config | (control << 8),
430 QD6580_DEF_DATA, QD6580_DEF_DATA2);
431 453
454 qd_setup(hwif, base, config | (control << 8));
455
456 hwif->port_init_devs = qd6580_port_init_devs;
432 hwif->set_pio_mode = &qd6580_set_pio_mode; 457 hwif->set_pio_mode = &qd6580_set_pio_mode;
433 458
434 idx[0] = unit; 459 idx[unit] = unit;
435 460
436 ide_device_add(idx); 461 ide_device_add(idx, &qd65xx_port_info);
437 462
438 outb(QD_DEF_CONTR, QD_CONTROL_PORT); 463 outb(QD_DEF_CONTR, QD_CONTROL_PORT);
439 464
@@ -447,20 +472,20 @@ static int __init qd_probe(int base)
447 printk(KERN_INFO "%s&%s: qd6580: dual IDE board\n", 472 printk(KERN_INFO "%s&%s: qd6580: dual IDE board\n",
448 hwif->name, mate->name); 473 hwif->name, mate->name);
449 474
450 qd_setup(hwif, base, config | (control << 8), 475 qd_setup(hwif, base, config | (control << 8));
451 QD6580_DEF_DATA, QD6580_DEF_DATA);
452 476
477 hwif->port_init_devs = qd6580_port_init_devs;
453 hwif->set_pio_mode = &qd6580_set_pio_mode; 478 hwif->set_pio_mode = &qd6580_set_pio_mode;
454 479
455 qd_setup(mate, base, config | (control << 8), 480 qd_setup(mate, base, config | (control << 8));
456 QD6580_DEF_DATA2, QD6580_DEF_DATA2);
457 481
482 mate->port_init_devs = qd6580_port_init_devs;
458 mate->set_pio_mode = &qd6580_set_pio_mode; 483 mate->set_pio_mode = &qd6580_set_pio_mode;
459 484
460 idx[0] = 0; 485 idx[0] = 0;
461 idx[1] = 1; 486 idx[1] = 1;
462 487
463 ide_device_add(idx); 488 ide_device_add(idx, &qd65xx_port_info);
464 489
465 outb(QD_DEF_CONTR, QD_CONTROL_PORT); 490 outb(QD_DEF_CONTR, QD_CONTROL_PORT);
466 491
diff --git a/drivers/ide/legacy/umc8672.c b/drivers/ide/legacy/umc8672.c
index 26f38ce58776..5696ba026005 100644
--- a/drivers/ide/legacy/umc8672.c
+++ b/drivers/ide/legacy/umc8672.c
@@ -120,9 +120,14 @@ static void umc_set_pio_mode(ide_drive_t *drive, const u8 pio)
120 spin_unlock_irqrestore(&ide_lock, flags); 120 spin_unlock_irqrestore(&ide_lock, flags);
121} 121}
122 122
123static const struct ide_port_info umc8672_port_info __initdata = {
124 .chipset = ide_umc8672,
125 .host_flags = IDE_HFLAG_NO_DMA | IDE_HFLAG_NO_AUTOTUNE,
126 .pio_mask = ATA_PIO4,
127};
128
123static int __init umc8672_probe(void) 129static int __init umc8672_probe(void)
124{ 130{
125 ide_hwif_t *hwif, *mate;
126 unsigned long flags; 131 unsigned long flags;
127 static u8 idx[4] = { 0, 1, 0xff, 0xff }; 132 static u8 idx[4] = { 0, 1, 0xff, 0xff };
128 133
@@ -143,21 +148,10 @@ static int __init umc8672_probe(void)
143 umc_set_speeds (current_speeds); 148 umc_set_speeds (current_speeds);
144 local_irq_restore(flags); 149 local_irq_restore(flags);
145 150
146 hwif = &ide_hwifs[0]; 151 ide_hwifs[0].set_pio_mode = &umc_set_pio_mode;
147 mate = &ide_hwifs[1]; 152 ide_hwifs[1].set_pio_mode = &umc_set_pio_mode;
148
149 hwif->chipset = ide_umc8672;
150 hwif->pio_mask = ATA_PIO4;
151 hwif->set_pio_mode = &umc_set_pio_mode;
152 hwif->mate = mate;
153
154 mate->chipset = ide_umc8672;
155 mate->pio_mask = ATA_PIO4;
156 mate->set_pio_mode = &umc_set_pio_mode;
157 mate->mate = hwif;
158 mate->channel = 1;
159 153
160 ide_device_add(idx); 154 ide_device_add(idx, &umc8672_port_info);
161 155
162 return 0; 156 return 0;
163} 157}
diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c
index cd42b30a7a3b..0f4bf5d72835 100644
--- a/drivers/ide/mips/au1xxx-ide.c
+++ b/drivers/ide/mips/au1xxx-ide.c
@@ -548,6 +548,17 @@ static void auide_setup_ports(hw_regs_t *hw, _auide_hwif *ahwif)
548 *ata_regs = ahwif->regbase + (14 << AU1XXX_ATA_REG_OFFSET); 548 *ata_regs = ahwif->regbase + (14 << AU1XXX_ATA_REG_OFFSET);
549} 549}
550 550
551static const struct ide_port_info au1xxx_port_info = {
552 .host_flags = IDE_HFLAG_POST_SET_MODE |
553 IDE_HFLAG_NO_DMA | /* no SFF-style DMA */
554 IDE_HFLAG_NO_IO_32BIT |
555 IDE_HFLAG_UNMASK_IRQS,
556 .pio_mask = ATA_PIO4,
557#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
558 .mwdma_mask = ATA_MWDMA2,
559#endif
560};
561
551static int au_ide_probe(struct device *dev) 562static int au_ide_probe(struct device *dev)
552{ 563{
553 struct platform_device *pdev = to_platform_device(dev); 564 struct platform_device *pdev = to_platform_device(dev);
@@ -606,21 +617,6 @@ static int au_ide_probe(struct device *dev)
606 617
607 hwif->dev = dev; 618 hwif->dev = dev;
608 619
609 hwif->ultra_mask = 0x0; /* Disable Ultra DMA */
610#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
611 hwif->mwdma_mask = 0x07; /* Multimode-2 DMA */
612 hwif->swdma_mask = 0x00;
613#else
614 hwif->mwdma_mask = 0x0;
615 hwif->swdma_mask = 0x0;
616#endif
617
618 hwif->pio_mask = ATA_PIO4;
619 hwif->host_flags = IDE_HFLAG_POST_SET_MODE;
620
621 hwif->drives[0].unmask = 1;
622 hwif->drives[1].unmask = 1;
623
624 /* hold should be on in all cases */ 620 /* hold should be on in all cases */
625 hwif->hold = 1; 621 hwif->hold = 1;
626 622
@@ -651,16 +647,9 @@ static int au_ide_probe(struct device *dev)
651 hwif->ide_dma_test_irq = &auide_dma_test_irq; 647 hwif->ide_dma_test_irq = &auide_dma_test_irq;
652 hwif->dma_lost_irq = &auide_dma_lost_irq; 648 hwif->dma_lost_irq = &auide_dma_lost_irq;
653#endif 649#endif
654 hwif->channel = 0;
655 hwif->select_data = 0; /* no chipset-specific code */ 650 hwif->select_data = 0; /* no chipset-specific code */
656 hwif->config_data = 0; /* no chipset-specific code */ 651 hwif->config_data = 0; /* no chipset-specific code */
657 652
658 hwif->drives[0].autotune = 1; /* 1=autotune, 2=noautotune, 0=default */
659 hwif->drives[1].autotune = 1;
660
661 hwif->drives[0].no_io_32bit = 1;
662 hwif->drives[1].no_io_32bit = 1;
663
664 auide_hwif.hwif = hwif; 653 auide_hwif.hwif = hwif;
665 hwif->hwif_data = &auide_hwif; 654 hwif->hwif_data = &auide_hwif;
666 655
@@ -671,7 +660,7 @@ static int au_ide_probe(struct device *dev)
671 660
672 idx[0] = hwif->index; 661 idx[0] = hwif->index;
673 662
674 ide_device_add(idx); 663 ide_device_add(idx, &au1xxx_port_info);
675 664
676 dev_set_drvdata(dev, hwif); 665 dev_set_drvdata(dev, hwif);
677 666
@@ -688,7 +677,7 @@ static int au_ide_remove(struct device *dev)
688 ide_hwif_t *hwif = dev_get_drvdata(dev); 677 ide_hwif_t *hwif = dev_get_drvdata(dev);
689 _auide_hwif *ahwif = &auide_hwif; 678 _auide_hwif *ahwif = &auide_hwif;
690 679
691 ide_unregister(hwif->index); 680 ide_unregister(hwif->index, 0, 0);
692 681
693 iounmap((void *)ahwif->regbase); 682 iounmap((void *)ahwif->regbase);
694 683
diff --git a/drivers/ide/mips/swarm.c b/drivers/ide/mips/swarm.c
index 8b3959dfa2b7..956259fc09ba 100644
--- a/drivers/ide/mips/swarm.c
+++ b/drivers/ide/mips/swarm.c
@@ -129,7 +129,7 @@ static int __devinit swarm_ide_probe(struct device *dev)
129 129
130 idx[0] = hwif->index; 130 idx[0] = hwif->index;
131 131
132 ide_device_add(idx); 132 ide_device_add(idx, NULL);
133 133
134 dev_set_drvdata(dev, hwif); 134 dev_set_drvdata(dev, hwif);
135 135
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c
index 824df78c7012..cfb3265bc1a8 100644
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -7,7 +7,6 @@
7#include <linux/module.h> 7#include <linux/module.h>
8#include <linux/types.h> 8#include <linux/types.h>
9#include <linux/pci.h> 9#include <linux/pci.h>
10#include <linux/delay.h>
11#include <linux/hdreg.h> 10#include <linux/hdreg.h>
12#include <linux/ide.h> 11#include <linux/ide.h>
13#include <linux/init.h> 12#include <linux/init.h>
@@ -166,6 +165,16 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const ch
166 return dev->irq; 165 return dev->irq;
167} 166}
168 167
168static u8 __devinit atp86x_cable_detect(ide_hwif_t *hwif)
169{
170 struct pci_dev *dev = to_pci_dev(hwif->dev);
171 u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01;
172
173 pci_read_config_byte(dev, 0x49, &ata66);
174
175 return (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
176}
177
169static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) 178static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
170{ 179{
171 struct pci_dev *dev = to_pci_dev(hwif->dev); 180 struct pci_dev *dev = to_pci_dev(hwif->dev);
@@ -174,21 +183,10 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
174 183
175 if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) 184 if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF)
176 hwif->set_dma_mode = &aec6210_set_mode; 185 hwif->set_dma_mode = &aec6210_set_mode;
177 else 186 else {
178 hwif->set_dma_mode = &aec6260_set_mode; 187 hwif->set_dma_mode = &aec6260_set_mode;
179 188
180 if (hwif->dma_base == 0) 189 hwif->cable_detect = atp86x_cable_detect;
181 return;
182
183 if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF)
184 return;
185
186 if (hwif->cbl != ATA_CBL_PATA40_SHORT) {
187 u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01;
188
189 pci_read_config_byte(dev, 0x49, &ata66);
190
191 hwif->cbl = (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
192 } 190 }
193} 191}
194 192
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c
index 130cc6e784e5..b3b6f514ce2d 100644
--- a/drivers/ide/pci/alim15x3.c
+++ b/drivers/ide/pci/alim15x3.c
@@ -31,7 +31,6 @@
31#include <linux/types.h> 31#include <linux/types.h>
32#include <linux/kernel.h> 32#include <linux/kernel.h>
33#include <linux/pci.h> 33#include <linux/pci.h>
34#include <linux/delay.h>
35#include <linux/hdreg.h> 34#include <linux/hdreg.h>
36#include <linux/ide.h> 35#include <linux/ide.h>
37#include <linux/init.h> 36#include <linux/init.h>
@@ -666,13 +665,12 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif)
666 hwif->set_dma_mode = &ali_set_dma_mode; 665 hwif->set_dma_mode = &ali_set_dma_mode;
667 hwif->udma_filter = &ali_udma_filter; 666 hwif->udma_filter = &ali_udma_filter;
668 667
668 hwif->cable_detect = ata66_ali15x3;
669
669 if (hwif->dma_base == 0) 670 if (hwif->dma_base == 0)
670 return; 671 return;
671 672
672 hwif->dma_setup = &ali15x3_dma_setup; 673 hwif->dma_setup = &ali15x3_dma_setup;
673
674 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
675 hwif->cbl = ata66_ali15x3(hwif);
676} 674}
677 675
678/** 676/**
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index 8c52bc9eaa59..2ef890ce8097 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -17,12 +17,9 @@
17 17
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/ioport.h>
21#include <linux/blkdev.h>
22#include <linux/pci.h> 20#include <linux/pci.h>
23#include <linux/init.h> 21#include <linux/init.h>
24#include <linux/ide.h> 22#include <linux/ide.h>
25#include <asm/io.h>
26 23
27#include "ide-timing.h" 24#include "ide-timing.h"
28 25
@@ -199,6 +196,14 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev,
199 return dev->irq; 196 return dev->irq;
200} 197}
201 198
199static u8 __devinit amd_cable_detect(ide_hwif_t *hwif)
200{
201 if ((amd_80w >> hwif->channel) & 1)
202 return ATA_CBL_PATA80;
203 else
204 return ATA_CBL_PATA40;
205}
206
202static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) 207static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
203{ 208{
204 struct pci_dev *dev = to_pci_dev(hwif->dev); 209 struct pci_dev *dev = to_pci_dev(hwif->dev);
@@ -209,15 +214,7 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
209 hwif->set_pio_mode = &amd_set_pio_mode; 214 hwif->set_pio_mode = &amd_set_pio_mode;
210 hwif->set_dma_mode = &amd_set_drive; 215 hwif->set_dma_mode = &amd_set_drive;
211 216
212 if (!hwif->dma_base) 217 hwif->cable_detect = amd_cable_detect;
213 return;
214
215 if (hwif->cbl != ATA_CBL_PATA40_SHORT) {
216 if ((amd_80w >> hwif->channel) & 1)
217 hwif->cbl = ATA_CBL_PATA80;
218 else
219 hwif->cbl = ATA_CBL_PATA40;
220 }
221} 218}
222 219
223#define IDE_HFLAGS_AMD \ 220#define IDE_HFLAGS_AMD \
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
index b56274af1782..7e037c880cb0 100644
--- a/drivers/ide/pci/atiixp.c
+++ b/drivers/ide/pci/atiixp.c
@@ -6,15 +6,11 @@
6#include <linux/types.h> 6#include <linux/types.h>
7#include <linux/module.h> 7#include <linux/module.h>
8#include <linux/kernel.h> 8#include <linux/kernel.h>
9#include <linux/ioport.h>
10#include <linux/pci.h> 9#include <linux/pci.h>
11#include <linux/hdreg.h> 10#include <linux/hdreg.h>
12#include <linux/ide.h> 11#include <linux/ide.h>
13#include <linux/delay.h>
14#include <linux/init.h> 12#include <linux/init.h>
15 13
16#include <asm/io.h>
17
18#define ATIIXP_IDE_PIO_TIMING 0x40 14#define ATIIXP_IDE_PIO_TIMING 0x40
19#define ATIIXP_IDE_MDMA_TIMING 0x44 15#define ATIIXP_IDE_MDMA_TIMING 0x44
20#define ATIIXP_IDE_PIO_CONTROL 0x48 16#define ATIIXP_IDE_PIO_CONTROL 0x48
@@ -121,6 +117,19 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed)
121 spin_unlock_irqrestore(&atiixp_lock, flags); 117 spin_unlock_irqrestore(&atiixp_lock, flags);
122} 118}
123 119
120static u8 __devinit atiixp_cable_detect(ide_hwif_t *hwif)
121{
122 struct pci_dev *pdev = to_pci_dev(hwif->dev);
123 u8 udma_mode = 0, ch = hwif->channel;
124
125 pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode);
126
127 if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40)
128 return ATA_CBL_PATA80;
129 else
130 return ATA_CBL_PATA40;
131}
132
124/** 133/**
125 * init_hwif_atiixp - fill in the hwif for the ATIIXP 134 * init_hwif_atiixp - fill in the hwif for the ATIIXP
126 * @hwif: IDE interface 135 * @hwif: IDE interface
@@ -131,21 +140,10 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed)
131 140
132static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) 141static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
133{ 142{
134 struct pci_dev *pdev = to_pci_dev(hwif->dev);
135 u8 udma_mode = 0, ch = hwif->channel;
136
137 hwif->set_pio_mode = &atiixp_set_pio_mode; 143 hwif->set_pio_mode = &atiixp_set_pio_mode;
138 hwif->set_dma_mode = &atiixp_set_dma_mode; 144 hwif->set_dma_mode = &atiixp_set_dma_mode;
139 145
140 if (!hwif->dma_base) 146 hwif->cable_detect = atiixp_cable_detect;
141 return;
142
143 pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode);
144
145 if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40)
146 hwif->cbl = ATA_CBL_PATA80;
147 else
148 hwif->cbl = ATA_CBL_PATA40;
149} 147}
150 148
151static const struct ide_port_info atiixp_pci_info[] __devinitdata = { 149static const struct ide_port_info atiixp_pci_info[] __devinitdata = {
diff --git a/drivers/ide/pci/cmd640.c b/drivers/ide/pci/cmd640.c
index 7240c20b9593..bd24dad3cfc6 100644
--- a/drivers/ide/pci/cmd640.c
+++ b/drivers/ide/pci/cmd640.c
@@ -103,10 +103,6 @@
103#include <linux/types.h> 103#include <linux/types.h>
104#include <linux/kernel.h> 104#include <linux/kernel.h>
105#include <linux/delay.h> 105#include <linux/delay.h>
106#include <linux/timer.h>
107#include <linux/mm.h>
108#include <linux/ioport.h>
109#include <linux/blkdev.h>
110#include <linux/hdreg.h> 106#include <linux/hdreg.h>
111#include <linux/ide.h> 107#include <linux/ide.h>
112#include <linux/init.h> 108#include <linux/init.h>
@@ -703,6 +699,18 @@ static int pci_conf2(void)
703 return 0; 699 return 0;
704} 700}
705 701
702static const struct ide_port_info cmd640_port_info __initdata = {
703 .chipset = ide_cmd640,
704 .host_flags = IDE_HFLAG_SERIALIZE |
705 IDE_HFLAG_NO_DMA |
706 IDE_HFLAG_NO_AUTOTUNE |
707 IDE_HFLAG_ABUSE_PREFETCH |
708 IDE_HFLAG_ABUSE_FAST_DEVSEL,
709#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
710 .pio_mask = ATA_PIO5,
711#endif
712};
713
706/* 714/*
707 * Probe for a cmd640 chipset, and initialize it if found. 715 * Probe for a cmd640 chipset, and initialize it if found.
708 */ 716 */
@@ -760,11 +768,7 @@ static int __init cmd640x_init(void)
760 setup_device_ptrs (); 768 setup_device_ptrs ();
761 printk("%s: buggy cmd640%c interface on %s, config=0x%02x\n", 769 printk("%s: buggy cmd640%c interface on %s, config=0x%02x\n",
762 cmd_hwif0->name, 'a' + cmd640_chip_version - 1, bus_type, cfr); 770 cmd_hwif0->name, 'a' + cmd640_chip_version - 1, bus_type, cfr);
763 cmd_hwif0->chipset = ide_cmd640;
764#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED 771#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
765 cmd_hwif0->host_flags = IDE_HFLAG_ABUSE_PREFETCH |
766 IDE_HFLAG_ABUSE_FAST_DEVSEL;
767 cmd_hwif0->pio_mask = ATA_PIO5;
768 cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode; 772 cmd_hwif0->set_pio_mode = &cmd640_set_pio_mode;
769#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ 773#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
770 774
@@ -815,23 +819,14 @@ static int __init cmd640x_init(void)
815 * Initialize data for secondary cmd640 port, if enabled 819 * Initialize data for secondary cmd640 port, if enabled
816 */ 820 */
817 if (second_port_cmd640) { 821 if (second_port_cmd640) {
818 cmd_hwif0->serialized = 1;
819 cmd_hwif1->serialized = 1;
820 cmd_hwif1->chipset = ide_cmd640;
821 cmd_hwif0->mate = cmd_hwif1;
822 cmd_hwif1->mate = cmd_hwif0;
823 cmd_hwif1->channel = 1;
824#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED 822#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
825 cmd_hwif1->host_flags = IDE_HFLAG_ABUSE_PREFETCH |
826 IDE_HFLAG_ABUSE_FAST_DEVSEL;
827 cmd_hwif1->pio_mask = ATA_PIO5;
828 cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode; 823 cmd_hwif1->set_pio_mode = &cmd640_set_pio_mode;
829#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ 824#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */
830 825
831 idx[1] = cmd_hwif1->index; 826 idx[1] = cmd_hwif1->index;
832 } 827 }
833 printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name, 828 printk(KERN_INFO "%s: %sserialized, secondary interface %s\n", cmd_hwif1->name,
834 cmd_hwif0->serialized ? "" : "not ", port2); 829 second_port_cmd640 ? "" : "not ", port2);
835 830
836 /* 831 /*
837 * Establish initial timings/prefetch for all drives. 832 * Establish initial timings/prefetch for all drives.
@@ -876,7 +871,7 @@ static int __init cmd640x_init(void)
876 cmd640_dump_regs(); 871 cmd640_dump_regs();
877#endif 872#endif
878 873
879 ide_device_add(idx); 874 ide_device_add(idx, &cmd640_port_info);
880 875
881 return 1; 876 return 1;
882} 877}
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c
index 04aa9e59670e..edabe6299efd 100644
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -13,7 +13,6 @@
13#include <linux/module.h> 13#include <linux/module.h>
14#include <linux/types.h> 14#include <linux/types.h>
15#include <linux/pci.h> 15#include <linux/pci.h>
16#include <linux/delay.h>
17#include <linux/hdreg.h> 16#include <linux/hdreg.h>
18#include <linux/ide.h> 17#include <linux/ide.h>
19#include <linux/init.h> 18#include <linux/init.h>
@@ -393,6 +392,8 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
393 hwif->set_pio_mode = &cmd64x_set_pio_mode; 392 hwif->set_pio_mode = &cmd64x_set_pio_mode;
394 hwif->set_dma_mode = &cmd64x_set_dma_mode; 393 hwif->set_dma_mode = &cmd64x_set_dma_mode;
395 394
395 hwif->cable_detect = ata66_cmd64x;
396
396 if (!hwif->dma_base) 397 if (!hwif->dma_base)
397 return; 398 return;
398 399
@@ -411,9 +412,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
411 if (dev->device == PCI_DEVICE_ID_CMD_646 && dev->revision < 5) 412 if (dev->device == PCI_DEVICE_ID_CMD_646 && dev->revision < 5)
412 hwif->ultra_mask = 0x00; 413 hwif->ultra_mask = 0x00;
413 414
414 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
415 hwif->cbl = ata66_cmd64x(hwif);
416
417 switch (dev->device) { 415 switch (dev->device) {
418 case PCI_DEVICE_ID_CMD_648: 416 case PCI_DEVICE_ID_CMD_648:
419 case PCI_DEVICE_ID_CMD_649: 417 case PCI_DEVICE_ID_CMD_649:
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c
index eb68a9ad0c98..0be1a824102b 100644
--- a/drivers/ide/pci/cs5520.c
+++ b/drivers/ide/pci/cs5520.c
@@ -35,22 +35,12 @@
35#include <linux/module.h> 35#include <linux/module.h>
36#include <linux/types.h> 36#include <linux/types.h>
37#include <linux/kernel.h> 37#include <linux/kernel.h>
38#include <linux/delay.h>
39#include <linux/timer.h>
40#include <linux/mm.h>
41#include <linux/ioport.h>
42#include <linux/blkdev.h>
43#include <linux/hdreg.h> 38#include <linux/hdreg.h>
44
45#include <linux/interrupt.h>
46#include <linux/init.h> 39#include <linux/init.h>
47#include <linux/pci.h> 40#include <linux/pci.h>
48#include <linux/ide.h> 41#include <linux/ide.h>
49#include <linux/dma-mapping.h> 42#include <linux/dma-mapping.h>
50 43
51#include <asm/io.h>
52#include <asm/irq.h>
53
54struct pio_clocks 44struct pio_clocks
55{ 45{
56 int address; 46 int address;
@@ -180,7 +170,7 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic
180 170
181 ide_pci_setup_ports(dev, d, 14, &idx[0]); 171 ide_pci_setup_ports(dev, d, 14, &idx[0]);
182 172
183 ide_device_add(idx); 173 ide_device_add(idx, d);
184 174
185 return 0; 175 return 0;
186} 176}
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c
index 765aac397ced..941a1344820b 100644
--- a/drivers/ide/pci/cs5530.c
+++ b/drivers/ide/pci/cs5530.c
@@ -15,18 +15,12 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/delay.h>
19#include <linux/timer.h>
20#include <linux/mm.h>
21#include <linux/ioport.h>
22#include <linux/blkdev.h>
23#include <linux/hdreg.h> 18#include <linux/hdreg.h>
24#include <linux/interrupt.h>
25#include <linux/pci.h> 19#include <linux/pci.h>
26#include <linux/init.h> 20#include <linux/init.h>
27#include <linux/ide.h> 21#include <linux/ide.h>
22
28#include <asm/io.h> 23#include <asm/io.h>
29#include <asm/irq.h>
30 24
31/* 25/*
32 * Here are the standard PIO mode 0-4 timings for each "format". 26 * Here are the standard PIO mode 0-4 timings for each "format".
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c
index 66433aa53f59..d7b5ea992e94 100644
--- a/drivers/ide/pci/cs5535.c
+++ b/drivers/ide/pci/cs5535.c
@@ -155,8 +155,9 @@ static void cs5535_set_pio_mode(ide_drive_t *drive, const u8 pio)
155 cs5535_set_speed(drive, XFER_PIO_0 + pio); 155 cs5535_set_speed(drive, XFER_PIO_0 + pio);
156} 156}
157 157
158static u8 __devinit cs5535_cable_detect(struct pci_dev *dev) 158static u8 __devinit cs5535_cable_detect(ide_hwif_t *hwif)
159{ 159{
160 struct pci_dev *dev = to_pci_dev(hwif->dev);
160 u8 bit; 161 u8 bit;
161 162
162 /* if a 80 wire cable was detected */ 163 /* if a 80 wire cable was detected */
@@ -175,15 +176,10 @@ static u8 __devinit cs5535_cable_detect(struct pci_dev *dev)
175 */ 176 */
176static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) 177static void __devinit init_hwif_cs5535(ide_hwif_t *hwif)
177{ 178{
178 struct pci_dev *dev = to_pci_dev(hwif->dev);
179
180 hwif->set_pio_mode = &cs5535_set_pio_mode; 179 hwif->set_pio_mode = &cs5535_set_pio_mode;
181 hwif->set_dma_mode = &cs5535_set_dma_mode; 180 hwif->set_dma_mode = &cs5535_set_dma_mode;
182 181
183 if (hwif->dma_base == 0) 182 hwif->cable_detect = cs5535_cable_detect;
184 return;
185
186 hwif->cbl = cs5535_cable_detect(dev);
187} 183}
188 184
189static const struct ide_port_info cs5535_chipset __devinitdata = { 185static const struct ide_port_info cs5535_chipset __devinitdata = {
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c
index 50100ac8770f..724cbacf4e5b 100644
--- a/drivers/ide/pci/cy82c693.c
+++ b/drivers/ide/pci/cy82c693.c
@@ -45,7 +45,6 @@
45#include <linux/module.h> 45#include <linux/module.h>
46#include <linux/types.h> 46#include <linux/types.h>
47#include <linux/pci.h> 47#include <linux/pci.h>
48#include <linux/delay.h>
49#include <linux/ide.h> 48#include <linux/ide.h>
50#include <linux/init.h> 49#include <linux/init.h>
51 50
diff --git a/drivers/ide/pci/delkin_cb.c b/drivers/ide/pci/delkin_cb.c
index 27e47fc97100..3f9cd64c26a6 100644
--- a/drivers/ide/pci/delkin_cb.c
+++ b/drivers/ide/pci/delkin_cb.c
@@ -16,15 +16,14 @@
16 * License. See the file COPYING in the main directory of this archive for 16 * License. See the file COPYING in the main directory of this archive for
17 * more details. 17 * more details.
18 */ 18 */
19#include <linux/autoconf.h> 19
20#include <linux/types.h> 20#include <linux/types.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/mm.h>
23#include <linux/blkdev.h>
24#include <linux/hdreg.h> 22#include <linux/hdreg.h>
25#include <linux/ide.h> 23#include <linux/ide.h>
26#include <linux/init.h> 24#include <linux/init.h>
27#include <linux/pci.h> 25#include <linux/pci.h>
26
28#include <asm/io.h> 27#include <asm/io.h>
29 28
30/* 29/*
@@ -52,6 +51,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
52 ide_hwif_t *hwif = NULL; 51 ide_hwif_t *hwif = NULL;
53 ide_drive_t *drive; 52 ide_drive_t *drive;
54 int i, rc; 53 int i, rc;
54 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
55 55
56 rc = pci_enable_device(dev); 56 rc = pci_enable_device(dev);
57 if (rc) { 57 if (rc) {
@@ -78,12 +78,27 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
78 hw.irq = dev->irq; 78 hw.irq = dev->irq;
79 hw.chipset = ide_pci; /* this enables IRQ sharing */ 79 hw.chipset = ide_pci; /* this enables IRQ sharing */
80 80
81 rc = ide_register_hw(&hw, &ide_undecoded_slave, &hwif); 81 hwif = ide_deprecated_find_port(hw.io_ports[IDE_DATA_OFFSET]);
82 if (rc < 0) { 82 if (hwif == NULL)
83 printk(KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n", rc); 83 goto out_disable;
84 pci_disable_device(dev); 84
85 return -ENODEV; 85 i = hwif->index;
86 } 86
87 if (hwif->present)
88 ide_unregister(i, 0, 0);
89 else if (!hwif->hold)
90 ide_init_port_data(hwif, i);
91
92 ide_init_port_hw(hwif, &hw);
93 hwif->quirkproc = &ide_undecoded_slave;
94
95 idx[0] = i;
96
97 ide_device_add(idx, NULL);
98
99 if (!hwif->present)
100 goto out_disable;
101
87 pci_set_drvdata(dev, hwif); 102 pci_set_drvdata(dev, hwif);
88 hwif->dev = &dev->dev; 103 hwif->dev = &dev->dev;
89 drive = &hwif->drives[0]; 104 drive = &hwif->drives[0];
@@ -92,6 +107,11 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
92 drive->unmask = 1; 107 drive->unmask = 1;
93 } 108 }
94 return 0; 109 return 0;
110
111out_disable:
112 printk(KERN_ERR "delkin_cb: no IDE devices found\n");
113 pci_disable_device(dev);
114 return -ENODEV;
95} 115}
96 116
97static void 117static void
@@ -100,7 +120,8 @@ delkin_cb_remove (struct pci_dev *dev)
100 ide_hwif_t *hwif = pci_get_drvdata(dev); 120 ide_hwif_t *hwif = pci_get_drvdata(dev);
101 121
102 if (hwif) 122 if (hwif)
103 ide_unregister(hwif->index); 123 ide_unregister(hwif->index, 0, 0);
124
104 pci_disable_device(dev); 125 pci_disable_device(dev);
105} 126}
106 127
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c
index 59ebe84f1053..9262a9174b4e 100644
--- a/drivers/ide/pci/generic.c
+++ b/drivers/ide/pci/generic.c
@@ -22,18 +22,11 @@
22#include <linux/types.h> 22#include <linux/types.h>
23#include <linux/module.h> 23#include <linux/module.h>
24#include <linux/kernel.h> 24#include <linux/kernel.h>
25#include <linux/delay.h>
26#include <linux/timer.h>
27#include <linux/mm.h>
28#include <linux/ioport.h>
29#include <linux/blkdev.h>
30#include <linux/hdreg.h> 25#include <linux/hdreg.h>
31#include <linux/pci.h> 26#include <linux/pci.h>
32#include <linux/ide.h> 27#include <linux/ide.h>
33#include <linux/init.h> 28#include <linux/init.h>
34 29
35#include <asm/io.h>
36
37static int ide_generic_all; /* Set to claim all devices */ 30static int ide_generic_all; /* Set to claim all devices */
38 31
39/* 32/*
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
index 25dbb814822d..9f01da46b016 100644
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -26,20 +26,13 @@
26#include <linux/module.h> 26#include <linux/module.h>
27#include <linux/types.h> 27#include <linux/types.h>
28#include <linux/kernel.h> 28#include <linux/kernel.h>
29#include <linux/delay.h>
30#include <linux/timer.h>
31#include <linux/mm.h>
32#include <linux/ioport.h> 29#include <linux/ioport.h>
33#include <linux/blkdev.h>
34#include <linux/hdreg.h> 30#include <linux/hdreg.h>
35#include <linux/interrupt.h> 31#include <linux/interrupt.h>
36#include <linux/pci.h> 32#include <linux/pci.h>
37#include <linux/init.h> 33#include <linux/init.h>
38#include <linux/ide.h> 34#include <linux/ide.h>
39 35
40#include <asm/io.h>
41#include <asm/irq.h>
42
43#define HPT343_DEBUG_DRIVE_INFO 0 36#define HPT343_DEBUG_DRIVE_INFO 0
44 37
45static void hpt34x_set_mode(ide_drive_t *drive, const u8 speed) 38static void hpt34x_set_mode(ide_drive_t *drive, const u8 speed)
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index 5623cad569da..d0f7bb8b8adf 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -121,12 +121,8 @@
121#include <linux/module.h> 121#include <linux/module.h>
122#include <linux/kernel.h> 122#include <linux/kernel.h>
123#include <linux/delay.h> 123#include <linux/delay.h>
124#include <linux/timer.h>
125#include <linux/mm.h>
126#include <linux/ioport.h>
127#include <linux/blkdev.h> 124#include <linux/blkdev.h>
128#include <linux/hdreg.h> 125#include <linux/hdreg.h>
129
130#include <linux/interrupt.h> 126#include <linux/interrupt.h>
131#include <linux/pci.h> 127#include <linux/pci.h>
132#include <linux/init.h> 128#include <linux/init.h>
@@ -134,7 +130,6 @@
134 130
135#include <asm/uaccess.h> 131#include <asm/uaccess.h>
136#include <asm/io.h> 132#include <asm/io.h>
137#include <asm/irq.h>
138 133
139/* various tuning parameters */ 134/* various tuning parameters */
140#define HPT_RESET_STATE_ENGINE 135#define HPT_RESET_STATE_ENGINE
@@ -1279,12 +1274,55 @@ static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const cha
1279 return dev->irq; 1274 return dev->irq;
1280} 1275}
1281 1276
1277static u8 __devinit hpt3xx_cable_detect(ide_hwif_t *hwif)
1278{
1279 struct pci_dev *dev = to_pci_dev(hwif->dev);
1280 struct hpt_info *info = pci_get_drvdata(dev);
1281 u8 chip_type = info->chip_type;
1282 u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02;
1283
1284 /*
1285 * The HPT37x uses the CBLID pins as outputs for MA15/MA16
1286 * address lines to access an external EEPROM. To read valid
1287 * cable detect state the pins must be enabled as inputs.
1288 */
1289 if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
1290 /*
1291 * HPT374 PCI function 1
1292 * - set bit 15 of reg 0x52 to enable TCBLID as input
1293 * - set bit 15 of reg 0x56 to enable FCBLID as input
1294 */
1295 u8 mcr_addr = hwif->select_data + 2;
1296 u16 mcr;
1297
1298 pci_read_config_word(dev, mcr_addr, &mcr);
1299 pci_write_config_word(dev, mcr_addr, (mcr | 0x8000));
1300 /* now read cable id register */
1301 pci_read_config_byte(dev, 0x5a, &scr1);
1302 pci_write_config_word(dev, mcr_addr, mcr);
1303 } else if (chip_type >= HPT370) {
1304 /*
1305 * HPT370/372 and 374 pcifn 0
1306 * - clear bit 0 of reg 0x5b to enable P/SCBLID as inputs
1307 */
1308 u8 scr2 = 0;
1309
1310 pci_read_config_byte(dev, 0x5b, &scr2);
1311 pci_write_config_byte(dev, 0x5b, (scr2 & ~1));
1312 /* now read cable id register */
1313 pci_read_config_byte(dev, 0x5a, &scr1);
1314 pci_write_config_byte(dev, 0x5b, scr2);
1315 } else
1316 pci_read_config_byte(dev, 0x5a, &scr1);
1317
1318 return (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
1319}
1320
1282static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) 1321static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1283{ 1322{
1284 struct pci_dev *dev = to_pci_dev(hwif->dev); 1323 struct pci_dev *dev = to_pci_dev(hwif->dev);
1285 struct hpt_info *info = pci_get_drvdata(dev); 1324 struct hpt_info *info = pci_get_drvdata(dev);
1286 int serialize = HPT_SERIALIZE_IO; 1325 int serialize = HPT_SERIALIZE_IO;
1287 u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02;
1288 u8 chip_type = info->chip_type; 1326 u8 chip_type = info->chip_type;
1289 u8 new_mcr, old_mcr = 0; 1327 u8 new_mcr, old_mcr = 0;
1290 1328
@@ -1301,6 +1339,8 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1301 hwif->udma_filter = &hpt3xx_udma_filter; 1339 hwif->udma_filter = &hpt3xx_udma_filter;
1302 hwif->mdma_filter = &hpt3xx_mdma_filter; 1340 hwif->mdma_filter = &hpt3xx_mdma_filter;
1303 1341
1342 hwif->cable_detect = hpt3xx_cable_detect;
1343
1304 /* 1344 /*
1305 * HPT3xxN chips have some complications: 1345 * HPT3xxN chips have some complications:
1306 * 1346 *
@@ -1346,43 +1386,6 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1346 if (hwif->dma_base == 0) 1386 if (hwif->dma_base == 0)
1347 return; 1387 return;
1348 1388
1349 /*
1350 * The HPT37x uses the CBLID pins as outputs for MA15/MA16
1351 * address lines to access an external EEPROM. To read valid
1352 * cable detect state the pins must be enabled as inputs.
1353 */
1354 if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
1355 /*
1356 * HPT374 PCI function 1
1357 * - set bit 15 of reg 0x52 to enable TCBLID as input
1358 * - set bit 15 of reg 0x56 to enable FCBLID as input
1359 */
1360 u8 mcr_addr = hwif->select_data + 2;
1361 u16 mcr;
1362
1363 pci_read_config_word (dev, mcr_addr, &mcr);
1364 pci_write_config_word(dev, mcr_addr, (mcr | 0x8000));
1365 /* now read cable id register */
1366 pci_read_config_byte (dev, 0x5a, &scr1);
1367 pci_write_config_word(dev, mcr_addr, mcr);
1368 } else if (chip_type >= HPT370) {
1369 /*
1370 * HPT370/372 and 374 pcifn 0
1371 * - clear bit 0 of reg 0x5b to enable P/SCBLID as inputs
1372 */
1373 u8 scr2 = 0;
1374
1375 pci_read_config_byte (dev, 0x5b, &scr2);
1376 pci_write_config_byte(dev, 0x5b, (scr2 & ~1));
1377 /* now read cable id register */
1378 pci_read_config_byte (dev, 0x5a, &scr1);
1379 pci_write_config_byte(dev, 0x5b, scr2);
1380 } else
1381 pci_read_config_byte (dev, 0x5a, &scr1);
1382
1383 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
1384 hwif->cbl = (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
1385
1386 if (chip_type >= HPT374) { 1389 if (chip_type >= HPT374) {
1387 hwif->ide_dma_test_irq = &hpt374_ide_dma_test_irq; 1390 hwif->ide_dma_test_irq = &hpt374_ide_dma_test_irq;
1388 hwif->ide_dma_end = &hpt374_ide_dma_end; 1391 hwif->ide_dma_end = &hpt374_ide_dma_end;
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c
index df74e588a530..e3427eaab430 100644
--- a/drivers/ide/pci/it8213.c
+++ b/drivers/ide/pci/it8213.c
@@ -10,13 +10,10 @@
10#include <linux/types.h> 10#include <linux/types.h>
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/pci.h> 12#include <linux/pci.h>
13#include <linux/delay.h>
14#include <linux/hdreg.h> 13#include <linux/hdreg.h>
15#include <linux/ide.h> 14#include <linux/ide.h>
16#include <linux/init.h> 15#include <linux/init.h>
17 16
18#include <asm/io.h>
19
20/** 17/**
21 * it8213_set_pio_mode - set host controller for PIO mode 18 * it8213_set_pio_mode - set host controller for PIO mode
22 * @drive: drive 19 * @drive: drive
@@ -143,6 +140,16 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed)
143 } 140 }
144} 141}
145 142
143static u8 __devinit it8213_cable_detect(ide_hwif_t *hwif)
144{
145 struct pci_dev *dev = to_pci_dev(hwif->dev);
146 u8 reg42h = 0;
147
148 pci_read_config_byte(dev, 0x42, &reg42h);
149
150 return (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
151}
152
146/** 153/**
147 * init_hwif_it8213 - set up hwif structs 154 * init_hwif_it8213 - set up hwif structs
148 * @hwif: interface to set up 155 * @hwif: interface to set up
@@ -152,19 +159,10 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed)
152 159
153static void __devinit init_hwif_it8213(ide_hwif_t *hwif) 160static void __devinit init_hwif_it8213(ide_hwif_t *hwif)
154{ 161{
155 struct pci_dev *dev = to_pci_dev(hwif->dev);
156 u8 reg42h = 0;
157
158 hwif->set_dma_mode = &it8213_set_dma_mode; 162 hwif->set_dma_mode = &it8213_set_dma_mode;
159 hwif->set_pio_mode = &it8213_set_pio_mode; 163 hwif->set_pio_mode = &it8213_set_pio_mode;
160 164
161 if (!hwif->dma_base) 165 hwif->cable_detect = it8213_cable_detect;
162 return;
163
164 pci_read_config_byte(dev, 0x42, &reg42h);
165
166 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
167 hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
168} 166}
169 167
170 168
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c
index 938d35f35c81..1597f0cc1bf1 100644
--- a/drivers/ide/pci/it821x.c
+++ b/drivers/ide/pci/it821x.c
@@ -63,13 +63,10 @@
63#include <linux/types.h> 63#include <linux/types.h>
64#include <linux/module.h> 64#include <linux/module.h>
65#include <linux/pci.h> 65#include <linux/pci.h>
66#include <linux/delay.h>
67#include <linux/hdreg.h> 66#include <linux/hdreg.h>
68#include <linux/ide.h> 67#include <linux/ide.h>
69#include <linux/init.h> 68#include <linux/init.h>
70 69
71#include <asm/io.h>
72
73struct it821x_dev 70struct it821x_dev
74{ 71{
75 unsigned int smart:1, /* Are we in smart raid mode */ 72 unsigned int smart:1, /* Are we in smart raid mode */
@@ -579,14 +576,13 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
579 } else 576 } else
580 hwif->host_flags |= IDE_HFLAG_NO_SET_MODE; 577 hwif->host_flags |= IDE_HFLAG_NO_SET_MODE;
581 578
579 hwif->cable_detect = ata66_it821x;
580
582 if (hwif->dma_base == 0) 581 if (hwif->dma_base == 0)
583 return; 582 return;
584 583
585 hwif->ultra_mask = ATA_UDMA6; 584 hwif->ultra_mask = ATA_UDMA6;
586 hwif->mwdma_mask = ATA_MWDMA2; 585 hwif->mwdma_mask = ATA_MWDMA2;
587
588 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
589 hwif->cbl = ata66_it821x(hwif);
590} 586}
591 587
592static void __devinit it8212_disable_raid(struct pci_dev *dev) 588static void __devinit it8212_disable_raid(struct pci_dev *dev)
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c
index 8b40f6479c55..a56bcb4f22f4 100644
--- a/drivers/ide/pci/jmicron.c
+++ b/drivers/ide/pci/jmicron.c
@@ -8,13 +8,10 @@
8#include <linux/types.h> 8#include <linux/types.h>
9#include <linux/module.h> 9#include <linux/module.h>
10#include <linux/pci.h> 10#include <linux/pci.h>
11#include <linux/delay.h>
12#include <linux/hdreg.h> 11#include <linux/hdreg.h>
13#include <linux/ide.h> 12#include <linux/ide.h>
14#include <linux/init.h> 13#include <linux/init.h>
15 14
16#include <asm/io.h>
17
18typedef enum { 15typedef enum {
19 PORT_PATA0 = 0, 16 PORT_PATA0 = 0,
20 PORT_PATA1 = 1, 17 PORT_PATA1 = 1,
@@ -111,11 +108,7 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif)
111 hwif->set_pio_mode = &jmicron_set_pio_mode; 108 hwif->set_pio_mode = &jmicron_set_pio_mode;
112 hwif->set_dma_mode = &jmicron_set_dma_mode; 109 hwif->set_dma_mode = &jmicron_set_dma_mode;
113 110
114 if (hwif->dma_base == 0) 111 hwif->cable_detect = ata66_jmicron;
115 return;
116
117 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
118 hwif->cbl = ata66_jmicron(hwif);
119} 112}
120 113
121static const struct ide_port_info jmicron_chipset __devinitdata = { 114static const struct ide_port_info jmicron_chipset __devinitdata = {
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c
index fc9eee9ccac3..bf0d3b2931f1 100644
--- a/drivers/ide/pci/ns87415.c
+++ b/drivers/ide/pci/ns87415.c
@@ -10,11 +10,7 @@
10#include <linux/module.h> 10#include <linux/module.h>
11#include <linux/types.h> 11#include <linux/types.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/timer.h>
14#include <linux/mm.h>
15#include <linux/ioport.h>
16#include <linux/interrupt.h> 13#include <linux/interrupt.h>
17#include <linux/blkdev.h>
18#include <linux/hdreg.h> 14#include <linux/hdreg.h>
19#include <linux/pci.h> 15#include <linux/pci.h>
20#include <linux/delay.h> 16#include <linux/delay.h>
diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c
index 0ce92d323036..46e8748f507e 100644
--- a/drivers/ide/pci/opti621.c
+++ b/drivers/ide/pci/opti621.c
@@ -87,11 +87,6 @@
87#include <linux/types.h> 87#include <linux/types.h>
88#include <linux/module.h> 88#include <linux/module.h>
89#include <linux/kernel.h> 89#include <linux/kernel.h>
90#include <linux/delay.h>
91#include <linux/timer.h>
92#include <linux/mm.h>
93#include <linux/ioport.h>
94#include <linux/blkdev.h>
95#include <linux/pci.h> 90#include <linux/pci.h>
96#include <linux/hdreg.h> 91#include <linux/hdreg.h>
97#include <linux/ide.h> 92#include <linux/ide.h>
@@ -320,14 +315,18 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)
320 spin_unlock_irqrestore(&opti621_lock, flags); 315 spin_unlock_irqrestore(&opti621_lock, flags);
321} 316}
322 317
318static void __devinit opti621_port_init_devs(ide_hwif_t *hwif)
319{
320 hwif->drives[0].drive_data = PIO_DONT_KNOW;
321 hwif->drives[1].drive_data = PIO_DONT_KNOW;
322}
323
323/* 324/*
324 * init_hwif_opti621() is called once for each hwif found at boot. 325 * init_hwif_opti621() is called once for each hwif found at boot.
325 */ 326 */
326static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) 327static void __devinit init_hwif_opti621 (ide_hwif_t *hwif)
327{ 328{
328 hwif->drives[0].drive_data = PIO_DONT_KNOW; 329 hwif->port_init_devs = opti621_port_init_devs;
329 hwif->drives[1].drive_data = PIO_DONT_KNOW;
330
331 hwif->set_pio_mode = &opti621_set_pio_mode; 330 hwif->set_pio_mode = &opti621_set_pio_mode;
332} 331}
333 332
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index bb29db03540e..1c8cb7797a4a 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -19,18 +19,12 @@
19#include <linux/types.h> 19#include <linux/types.h>
20#include <linux/kernel.h> 20#include <linux/kernel.h>
21#include <linux/delay.h> 21#include <linux/delay.h>
22#include <linux/timer.h>
23#include <linux/mm.h>
24#include <linux/ioport.h>
25#include <linux/blkdev.h>
26#include <linux/hdreg.h> 22#include <linux/hdreg.h>
27#include <linux/interrupt.h>
28#include <linux/pci.h> 23#include <linux/pci.h>
29#include <linux/init.h> 24#include <linux/init.h>
30#include <linux/ide.h> 25#include <linux/ide.h>
31 26
32#include <asm/io.h> 27#include <asm/io.h>
33#include <asm/irq.h>
34 28
35#ifdef CONFIG_PPC_PMAC 29#ifdef CONFIG_PPC_PMAC
36#include <asm/prom.h> 30#include <asm/prom.h>
@@ -197,7 +191,7 @@ static void pdcnew_set_pio_mode(ide_drive_t *drive, const u8 pio)
197 } 191 }
198} 192}
199 193
200static u8 pdcnew_cable_detect(ide_hwif_t *hwif) 194static u8 __devinit pdcnew_cable_detect(ide_hwif_t *hwif)
201{ 195{
202 if (get_indexed_reg(hwif, 0x0b) & 0x04) 196 if (get_indexed_reg(hwif, 0x0b) & 0x04)
203 return ATA_CBL_PATA40; 197 return ATA_CBL_PATA40;
@@ -456,11 +450,7 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
456 hwif->quirkproc = &pdcnew_quirkproc; 450 hwif->quirkproc = &pdcnew_quirkproc;
457 hwif->resetproc = &pdcnew_reset; 451 hwif->resetproc = &pdcnew_reset;
458 452
459 if (hwif->dma_base == 0) 453 hwif->cable_detect = pdcnew_cable_detect;
460 return;
461
462 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
463 hwif->cbl = pdcnew_cable_detect(hwif);
464} 454}
465 455
466static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev) 456static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev)
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c
index 31a1308414a0..da4329790387 100644
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -32,18 +32,13 @@
32#include <linux/module.h> 32#include <linux/module.h>
33#include <linux/kernel.h> 33#include <linux/kernel.h>
34#include <linux/delay.h> 34#include <linux/delay.h>
35#include <linux/timer.h>
36#include <linux/mm.h>
37#include <linux/ioport.h>
38#include <linux/blkdev.h> 35#include <linux/blkdev.h>
39#include <linux/hdreg.h> 36#include <linux/hdreg.h>
40#include <linux/interrupt.h>
41#include <linux/pci.h> 37#include <linux/pci.h>
42#include <linux/init.h> 38#include <linux/init.h>
43#include <linux/ide.h> 39#include <linux/ide.h>
44 40
45#include <asm/io.h> 41#include <asm/io.h>
46#include <asm/irq.h>
47 42
48#define PDC202XX_DEBUG_DRIVE_INFO 0 43#define PDC202XX_DEBUG_DRIVE_INFO 0
49 44
@@ -140,10 +135,10 @@ static void pdc202xx_set_pio_mode(ide_drive_t *drive, const u8 pio)
140 pdc202xx_set_mode(drive, XFER_PIO_0 + pio); 135 pdc202xx_set_mode(drive, XFER_PIO_0 + pio);
141} 136}
142 137
143static u8 pdc202xx_old_cable_detect (ide_hwif_t *hwif) 138static u8 __devinit pdc2026x_old_cable_detect(ide_hwif_t *hwif)
144{ 139{
145 struct pci_dev *dev = to_pci_dev(hwif->dev); 140 struct pci_dev *dev = to_pci_dev(hwif->dev);
146 u16 CIS = 0, mask = (hwif->channel) ? (1<<11) : (1<<10); 141 u16 CIS, mask = hwif->channel ? (1 << 11) : (1 << 10);
147 142
148 pci_read_config_word(dev, 0x50, &CIS); 143 pci_read_config_word(dev, 0x50, &CIS);
149 144
@@ -311,9 +306,12 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
311 306
312 hwif->quirkproc = &pdc202xx_quirkproc; 307 hwif->quirkproc = &pdc202xx_quirkproc;
313 308
314 if (dev->device != PCI_DEVICE_ID_PROMISE_20246) 309 if (dev->device != PCI_DEVICE_ID_PROMISE_20246) {
315 hwif->resetproc = &pdc202xx_reset; 310 hwif->resetproc = &pdc202xx_reset;
316 311
312 hwif->cable_detect = pdc2026x_old_cable_detect;
313 }
314
317 if (hwif->dma_base == 0) 315 if (hwif->dma_base == 0)
318 return; 316 return;
319 317
@@ -321,9 +319,6 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
321 hwif->dma_timeout = &pdc202xx_dma_timeout; 319 hwif->dma_timeout = &pdc202xx_dma_timeout;
322 320
323 if (dev->device != PCI_DEVICE_ID_PROMISE_20246) { 321 if (dev->device != PCI_DEVICE_ID_PROMISE_20246) {
324 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
325 hwif->cbl = pdc202xx_old_cable_detect(hwif);
326
327 hwif->dma_start = &pdc202xx_old_ide_dma_start; 322 hwif->dma_start = &pdc202xx_old_ide_dma_start;
328 hwif->ide_dma_end = &pdc202xx_old_ide_dma_end; 323 hwif->ide_dma_end = &pdc202xx_old_ide_dma_end;
329 } 324 }
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
index c1a6b68337d5..decef0f47674 100644
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -47,11 +47,9 @@
47#include <linux/types.h> 47#include <linux/types.h>
48#include <linux/module.h> 48#include <linux/module.h>
49#include <linux/kernel.h> 49#include <linux/kernel.h>
50#include <linux/ioport.h>
51#include <linux/pci.h> 50#include <linux/pci.h>
52#include <linux/hdreg.h> 51#include <linux/hdreg.h>
53#include <linux/ide.h> 52#include <linux/ide.h>
54#include <linux/delay.h>
55#include <linux/init.h> 53#include <linux/init.h>
56 54
57#include <asm/io.h> 55#include <asm/io.h>
@@ -290,14 +288,11 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif)
290 hwif->set_pio_mode = &piix_set_pio_mode; 288 hwif->set_pio_mode = &piix_set_pio_mode;
291 hwif->set_dma_mode = &piix_set_dma_mode; 289 hwif->set_dma_mode = &piix_set_dma_mode;
292 290
291 hwif->cable_detect = piix_cable_detect;
292
293 if (!hwif->dma_base) 293 if (!hwif->dma_base)
294 return; 294 return;
295 295
296 if (hwif->ultra_mask & 0x78) {
297 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
298 hwif->cbl = piix_cable_detect(hwif);
299 }
300
301 if (no_piix_dma) 296 if (no_piix_dma)
302 hwif->ultra_mask = hwif->mwdma_mask = hwif->swdma_mask = 0; 297 hwif->ultra_mask = hwif->mwdma_mask = hwif->swdma_mask = 0;
303} 298}
diff --git a/drivers/ide/pci/rz1000.c b/drivers/ide/pci/rz1000.c
index 7ed6625819d4..51676612f78f 100644
--- a/drivers/ide/pci/rz1000.c
+++ b/drivers/ide/pci/rz1000.c
@@ -16,18 +16,11 @@
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/kernel.h> 18#include <linux/kernel.h>
19#include <linux/delay.h>
20#include <linux/timer.h>
21#include <linux/mm.h>
22#include <linux/ioport.h>
23#include <linux/blkdev.h>
24#include <linux/hdreg.h> 19#include <linux/hdreg.h>
25#include <linux/pci.h> 20#include <linux/pci.h>
26#include <linux/ide.h> 21#include <linux/ide.h>
27#include <linux/init.h> 22#include <linux/init.h>
28 23
29#include <asm/io.h>
30
31static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) 24static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
32{ 25{
33 struct pci_dev *dev = to_pci_dev(hwif->dev); 26 struct pci_dev *dev = to_pci_dev(hwif->dev);
@@ -40,8 +33,7 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
40 } else { 33 } else {
41 if (hwif->mate) 34 if (hwif->mate)
42 hwif->mate->serialized = hwif->serialized = 1; 35 hwif->mate->serialized = hwif->serialized = 1;
43 hwif->drives[0].no_unmask = 1; 36 hwif->host_flags |= IDE_HFLAG_NO_UNMASK_IRQS;
44 hwif->drives[1].no_unmask = 1;
45 printk(KERN_INFO "%s: serialized, disabled unmasking " 37 printk(KERN_INFO "%s: serialized, disabled unmasking "
46 "(buggy RZ1000/RZ1001)\n", hwif->name); 38 "(buggy RZ1000/RZ1001)\n", hwif->name);
47 } 39 }
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c
index af499a60eb31..561aa47c7720 100644
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -14,19 +14,13 @@
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/types.h> 15#include <linux/types.h>
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/delay.h>
18#include <linux/timer.h>
19#include <linux/mm.h>
20#include <linux/ioport.h>
21#include <linux/blkdev.h>
22#include <linux/hdreg.h> 17#include <linux/hdreg.h>
23#include <linux/interrupt.h>
24#include <linux/pci.h> 18#include <linux/pci.h>
25#include <linux/init.h> 19#include <linux/init.h>
26#include <linux/ide.h> 20#include <linux/ide.h>
27#include <linux/pm.h> 21#include <linux/pm.h>
22
28#include <asm/io.h> 23#include <asm/io.h>
29#include <asm/irq.h>
30 24
31#define SC1200_REV_A 0x00 25#define SC1200_REV_A 0x00
32#define SC1200_REV_B1 0x01 26#define SC1200_REV_B1 0x01
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c
index 7694969b02ce..238e3e181e87 100644
--- a/drivers/ide/pci/scc_pata.c
+++ b/drivers/ide/pci/scc_pata.c
@@ -644,6 +644,11 @@ static void __devinit init_iops_scc(ide_hwif_t *hwif)
644 init_mmio_iops_scc(hwif); 644 init_mmio_iops_scc(hwif);
645} 645}
646 646
647static u8 __devinit scc_cable_detect(ide_hwif_t *hwif)
648{
649 return ATA_CBL_PATA80;
650}
651
647/** 652/**
648 * init_hwif_scc - set up hwif 653 * init_hwif_scc - set up hwif
649 * @hwif: interface to set up 654 * @hwif: interface to set up
@@ -678,8 +683,7 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif)
678 else 683 else
679 hwif->ultra_mask = ATA_UDMA5; /* 100MHz */ 684 hwif->ultra_mask = ATA_UDMA5; /* 100MHz */
680 685
681 /* we support 80c cable only. */ 686 hwif->cable_detect = scc_cable_detect;
682 hwif->cbl = ATA_CBL_PATA80;
683} 687}
684 688
685#define DECLARE_SCC_DEV(name_str) \ 689#define DECLARE_SCC_DEV(name_str) \
@@ -732,7 +736,7 @@ static void __devexit scc_remove(struct pci_dev *dev)
732 hwif->dmatable_cpu = NULL; 736 hwif->dmatable_cpu = NULL;
733 } 737 }
734 738
735 ide_unregister(hwif->index); 739 ide_unregister(hwif->index, 0, 0);
736 740
737 hwif->chipset = ide_unknown; 741 hwif->chipset = ide_unknown;
738 iounmap((void*)ports->dma); 742 iounmap((void*)ports->dma);
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c
index f495253b7d41..c11880b0709f 100644
--- a/drivers/ide/pci/serverworks.c
+++ b/drivers/ide/pci/serverworks.c
@@ -31,12 +31,10 @@
31#include <linux/types.h> 31#include <linux/types.h>
32#include <linux/module.h> 32#include <linux/module.h>
33#include <linux/kernel.h> 33#include <linux/kernel.h>
34#include <linux/ioport.h>
35#include <linux/pci.h> 34#include <linux/pci.h>
36#include <linux/hdreg.h> 35#include <linux/hdreg.h>
37#include <linux/ide.h> 36#include <linux/ide.h>
38#include <linux/init.h> 37#include <linux/init.h>
39#include <linux/delay.h>
40 38
41#include <asm/io.h> 39#include <asm/io.h>
42 40
@@ -346,13 +344,8 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif)
346 hwif->set_dma_mode = &svwks_set_dma_mode; 344 hwif->set_dma_mode = &svwks_set_dma_mode;
347 hwif->udma_filter = &svwks_udma_filter; 345 hwif->udma_filter = &svwks_udma_filter;
348 346
349 if (!hwif->dma_base) 347 if (dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE)
350 return; 348 hwif->cable_detect = ata66_svwks;
351
352 if (dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) {
353 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
354 hwif->cbl = ata66_svwks(hwif);
355 }
356} 349}
357 350
358#define IDE_HFLAGS_SVWKS \ 351#define IDE_HFLAGS_SVWKS \
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c
index 85902074b1fc..054626497be4 100644
--- a/drivers/ide/pci/sgiioc4.c
+++ b/drivers/ide/pci/sgiioc4.c
@@ -25,8 +25,6 @@
25#include <linux/hdreg.h> 25#include <linux/hdreg.h>
26#include <linux/init.h> 26#include <linux/init.h>
27#include <linux/kernel.h> 27#include <linux/kernel.h>
28#include <linux/timer.h>
29#include <linux/mm.h>
30#include <linux/ioport.h> 28#include <linux/ioport.h>
31#include <linux/blkdev.h> 29#include <linux/blkdev.h>
32#include <linux/scatterlist.h> 30#include <linux/scatterlist.h>
@@ -555,7 +553,6 @@ static void __devinit
555ide_init_sgiioc4(ide_hwif_t * hwif) 553ide_init_sgiioc4(ide_hwif_t * hwif)
556{ 554{
557 hwif->mmio = 1; 555 hwif->mmio = 1;
558 hwif->pio_mask = 0x00;
559 hwif->set_pio_mode = NULL; /* Sets timing for PIO mode */ 556 hwif->set_pio_mode = NULL; /* Sets timing for PIO mode */
560 hwif->set_dma_mode = &sgiioc4_set_dma_mode; 557 hwif->set_dma_mode = &sgiioc4_set_dma_mode;
561 hwif->selectproc = NULL;/* Use the default routine to select drive */ 558 hwif->selectproc = NULL;/* Use the default routine to select drive */
@@ -572,8 +569,6 @@ ide_init_sgiioc4(ide_hwif_t * hwif)
572 if (hwif->dma_base == 0) 569 if (hwif->dma_base == 0)
573 return; 570 return;
574 571
575 hwif->mwdma_mask = ATA_MWDMA2_ONLY;
576
577 hwif->dma_host_set = &sgiioc4_dma_host_set; 572 hwif->dma_host_set = &sgiioc4_dma_host_set;
578 hwif->dma_setup = &sgiioc4_ide_dma_setup; 573 hwif->dma_setup = &sgiioc4_ide_dma_setup;
579 hwif->dma_start = &sgiioc4_ide_dma_start; 574 hwif->dma_start = &sgiioc4_ide_dma_start;
@@ -583,6 +578,13 @@ ide_init_sgiioc4(ide_hwif_t * hwif)
583 hwif->dma_timeout = &ide_dma_timeout; 578 hwif->dma_timeout = &ide_dma_timeout;
584} 579}
585 580
581static const struct ide_port_info sgiioc4_port_info __devinitdata = {
582 .chipset = ide_pci,
583 .host_flags = IDE_HFLAG_NO_DMA | /* no SFF-style DMA */
584 IDE_HFLAG_NO_AUTOTUNE,
585 .mwdma_mask = ATA_MWDMA2_ONLY,
586};
587
586static int __devinit 588static int __devinit
587sgiioc4_ide_setup_pci_device(struct pci_dev *dev) 589sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
588{ 590{
@@ -593,6 +595,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
593 int h; 595 int h;
594 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; 596 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
595 hw_regs_t hw; 597 hw_regs_t hw;
598 struct ide_port_info d = sgiioc4_port_info;
596 599
597 /* 600 /*
598 * Find an empty HWIF; if none available, return -ENOMEM. 601 * Find an empty HWIF; if none available, return -ENOMEM.
@@ -641,7 +644,6 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
641 ide_init_port_hw(hwif, &hw); 644 ide_init_port_hw(hwif, &hw);
642 645
643 hwif->dev = &dev->dev; 646 hwif->dev = &dev->dev;
644 hwif->channel = 0; /* Single Channel chip */
645 647
646 /* The IOC4 uses MMIO rather than Port IO. */ 648 /* The IOC4 uses MMIO rather than Port IO. */
647 default_hwif_mmiops(hwif); 649 default_hwif_mmiops(hwif);
@@ -649,15 +651,17 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
649 /* Initializing chipset IRQ Registers */ 651 /* Initializing chipset IRQ Registers */
650 writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4)); 652 writel(0x03, (void __iomem *)(irqport + IOC4_INTR_SET * 4));
651 653
652 if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) 654 if (dma_base == 0 || ide_dma_sgiioc4(hwif, dma_base)) {
653 printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n", 655 printk(KERN_INFO "%s: %s Bus-Master DMA disabled\n",
654 hwif->name, DRV_NAME); 656 hwif->name, DRV_NAME);
657 d.mwdma_mask = 0;
658 }
655 659
656 ide_init_sgiioc4(hwif); 660 ide_init_sgiioc4(hwif);
657 661
658 idx[0] = hwif->index; 662 idx[0] = hwif->index;
659 663
660 if (ide_device_add(idx)) 664 if (ide_device_add(idx, &d))
661 return -EIO; 665 return -EIO;
662 666
663 return 0; 667 return 0;
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c
index 4877bc8cd599..ef5b39fa042b 100644
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -39,7 +39,6 @@
39#include <linux/types.h> 39#include <linux/types.h>
40#include <linux/module.h> 40#include <linux/module.h>
41#include <linux/pci.h> 41#include <linux/pci.h>
42#include <linux/delay.h>
43#include <linux/hdreg.h> 42#include <linux/hdreg.h>
44#include <linux/ide.h> 43#include <linux/ide.h>
45#include <linux/init.h> 44#include <linux/init.h>
@@ -332,15 +331,18 @@ static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive)
332{ 331{
333 ide_hwif_t *hwif = HWIF(drive); 332 ide_hwif_t *hwif = HWIF(drive);
334 unsigned long addr = siimage_selreg(hwif, 0x1); 333 unsigned long addr = siimage_selreg(hwif, 0x1);
334 void __iomem *sata_error_addr
335 = (void __iomem *)hwif->sata_scr[SATA_ERROR_OFFSET];
335 336
336 if (SATA_ERROR_REG) { 337 if (sata_error_addr) {
337 unsigned long base = (unsigned long)hwif->hwif_data; 338 unsigned long base = (unsigned long)hwif->hwif_data;
338
339 u32 ext_stat = readl((void __iomem *)(base + 0x10)); 339 u32 ext_stat = readl((void __iomem *)(base + 0x10));
340 u8 watchdog = 0; 340 u8 watchdog = 0;
341
341 if (ext_stat & ((hwif->channel) ? 0x40 : 0x10)) { 342 if (ext_stat & ((hwif->channel) ? 0x40 : 0x10)) {
342 u32 sata_error = readl((void __iomem *)SATA_ERROR_REG); 343 u32 sata_error = readl(sata_error_addr);
343 writel(sata_error, (void __iomem *)SATA_ERROR_REG); 344
345 writel(sata_error, sata_error_addr);
344 watchdog = (sata_error & 0x00680000) ? 1 : 0; 346 watchdog = (sata_error & 0x00680000) ? 1 : 0;
345 printk(KERN_WARNING "%s: sata_error = 0x%08x, " 347 printk(KERN_WARNING "%s: sata_error = 0x%08x, "
346 "watchdog = %d, %s\n", 348 "watchdog = %d, %s\n",
@@ -419,13 +421,17 @@ static int sil_sata_busproc(ide_drive_t * drive, int state)
419 421
420static int sil_sata_reset_poll(ide_drive_t *drive) 422static int sil_sata_reset_poll(ide_drive_t *drive)
421{ 423{
422 if (SATA_STATUS_REG) { 424 ide_hwif_t *hwif = drive->hwif;
423 ide_hwif_t *hwif = HWIF(drive); 425 void __iomem *sata_status_addr
426 = (void __iomem *)hwif->sata_scr[SATA_STATUS_OFFSET];
424 427
425 /* SATA_STATUS_REG is valid only when in MMIO mode */ 428 if (sata_status_addr) {
426 if ((readl((void __iomem *)SATA_STATUS_REG) & 0x03) != 0x03) { 429 /* SATA Status is available only when in MMIO mode */
430 u32 sata_stat = readl(sata_status_addr);
431
432 if ((sata_stat & 0x03) != 0x03) {
427 printk(KERN_WARNING "%s: reset phy dead, status=0x%08x\n", 433 printk(KERN_WARNING "%s: reset phy dead, status=0x%08x\n",
428 hwif->name, readl((void __iomem *)SATA_STATUS_REG)); 434 hwif->name, sata_stat);
429 HWGROUP(drive)->polling = 0; 435 HWGROUP(drive)->polling = 0;
430 return ide_started; 436 return ide_started;
431 } 437 }
@@ -827,15 +833,14 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
827 } else 833 } else
828 hwif->udma_filter = &sil_pata_udma_filter; 834 hwif->udma_filter = &sil_pata_udma_filter;
829 835
836 hwif->cable_detect = ata66_siimage;
837
830 if (hwif->dma_base == 0) 838 if (hwif->dma_base == 0)
831 return; 839 return;
832 840
833 if (sata) 841 if (sata)
834 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; 842 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
835 843
836 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
837 hwif->cbl = ata66_siimage(hwif);
838
839 if (hwif->mmio) { 844 if (hwif->mmio) {
840 hwif->ide_dma_test_irq = &siimage_mmio_ide_dma_test_irq; 845 hwif->ide_dma_test_irq = &siimage_mmio_ide_dma_test_irq;
841 } else { 846 } else {
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c
index 2a461de22aa0..512bb4c1fd5c 100644
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -47,20 +47,11 @@
47#include <linux/types.h> 47#include <linux/types.h>
48#include <linux/module.h> 48#include <linux/module.h>
49#include <linux/kernel.h> 49#include <linux/kernel.h>
50#include <linux/delay.h>
51#include <linux/timer.h>
52#include <linux/mm.h>
53#include <linux/ioport.h>
54#include <linux/blkdev.h>
55#include <linux/hdreg.h> 50#include <linux/hdreg.h>
56
57#include <linux/interrupt.h>
58#include <linux/pci.h> 51#include <linux/pci.h>
59#include <linux/init.h> 52#include <linux/init.h>
60#include <linux/ide.h> 53#include <linux/ide.h>
61 54
62#include <asm/irq.h>
63
64#include "ide-timing.h" 55#include "ide-timing.h"
65 56
66/* registers layout and init values are chipset family dependant */ 57/* registers layout and init values are chipset family dependant */
@@ -565,13 +556,12 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif)
565 if (chipset_family >= ATA_133) 556 if (chipset_family >= ATA_133)
566 hwif->udma_filter = sis5513_ata133_udma_filter; 557 hwif->udma_filter = sis5513_ata133_udma_filter;
567 558
559 hwif->cable_detect = ata66_sis5513;
560
568 if (hwif->dma_base == 0) 561 if (hwif->dma_base == 0)
569 return; 562 return;
570 563
571 hwif->ultra_mask = udma_rates[chipset_family]; 564 hwif->ultra_mask = udma_rates[chipset_family];
572
573 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
574 hwif->cbl = ata66_sis5513(hwif);
575} 565}
576 566
577static const struct ide_port_info sis5513_chipset __devinitdata = { 567static const struct ide_port_info sis5513_chipset __devinitdata = {
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c
index da13a1298ada..ee261ae15b6f 100644
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -17,17 +17,11 @@
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/timer.h>
21#include <linux/mm.h>
22#include <linux/ioport.h>
23#include <linux/interrupt.h>
24#include <linux/blkdev.h>
25#include <linux/hdreg.h> 20#include <linux/hdreg.h>
26#include <linux/pci.h> 21#include <linux/pci.h>
27#include <linux/ide.h> 22#include <linux/ide.h>
28 23
29#include <asm/io.h> 24#include <asm/io.h>
30#include <asm/dma.h>
31 25
32#undef DEBUG 26#undef DEBUG
33 27
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c
index a6cf810c4699..65f4c2ffaa59 100644
--- a/drivers/ide/pci/slc90e66.c
+++ b/drivers/ide/pci/slc90e66.c
@@ -10,15 +10,11 @@
10#include <linux/types.h> 10#include <linux/types.h>
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/ioport.h>
14#include <linux/pci.h> 13#include <linux/pci.h>
15#include <linux/hdreg.h> 14#include <linux/hdreg.h>
16#include <linux/ide.h> 15#include <linux/ide.h>
17#include <linux/delay.h>
18#include <linux/init.h> 16#include <linux/init.h>
19 17
20#include <asm/io.h>
21
22static DEFINE_SPINLOCK(slc90e66_lock); 18static DEFINE_SPINLOCK(slc90e66_lock);
23 19
24static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) 20static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
@@ -118,23 +114,23 @@ static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed)
118 } 114 }
119} 115}
120 116
121static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) 117static u8 __devinit slc90e66_cable_detect(ide_hwif_t *hwif)
122{ 118{
123 struct pci_dev *dev = to_pci_dev(hwif->dev); 119 struct pci_dev *dev = to_pci_dev(hwif->dev);
124 u8 reg47 = 0; 120 u8 reg47 = 0, mask = hwif->channel ? 0x01 : 0x02;
125 u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */
126
127 hwif->set_pio_mode = &slc90e66_set_pio_mode;
128 hwif->set_dma_mode = &slc90e66_set_dma_mode;
129 121
130 pci_read_config_byte(dev, 0x47, &reg47); 122 pci_read_config_byte(dev, 0x47, &reg47);
131 123
132 if (hwif->dma_base == 0) 124 /* bit[0(1)]: 0:80, 1:40 */
133 return; 125 return (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
126}
127
128static void __devinit init_hwif_slc90e66(ide_hwif_t *hwif)
129{
130 hwif->set_pio_mode = &slc90e66_set_pio_mode;
131 hwif->set_dma_mode = &slc90e66_set_dma_mode;
134 132
135 if (hwif->cbl != ATA_CBL_PATA40_SHORT) 133 hwif->cable_detect = slc90e66_cable_detect;
136 /* bit[0(1)]: 0:80, 1:40 */
137 hwif->cbl = (reg47 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
138} 134}
139 135
140static const struct ide_port_info slc90e66_chipset __devinitdata = { 136static const struct ide_port_info slc90e66_chipset __devinitdata = {
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c
index 9fbbb4f2dd54..2ef2ed2f2b32 100644
--- a/drivers/ide/pci/tc86c001.c
+++ b/drivers/ide/pci/tc86c001.c
@@ -160,6 +160,19 @@ static int tc86c001_busproc(ide_drive_t *drive, int state)
160 return 0; 160 return 0;
161} 161}
162 162
163static u8 __devinit tc86c001_cable_detect(ide_hwif_t *hwif)
164{
165 struct pci_dev *dev = to_pci_dev(hwif->dev);
166 unsigned long sc_base = pci_resource_start(dev, 5);
167 u16 scr1 = inw(sc_base + 0x00);
168
169 /*
170 * System Control 1 Register bit 13 (PDIAGN):
171 * 0=80-pin cable, 1=40-pin cable
172 */
173 return (scr1 & 0x2000) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
174}
175
163static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) 176static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif)
164{ 177{
165 struct pci_dev *dev = to_pci_dev(hwif->dev); 178 struct pci_dev *dev = to_pci_dev(hwif->dev);
@@ -183,6 +196,8 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif)
183 196
184 hwif->busproc = &tc86c001_busproc; 197 hwif->busproc = &tc86c001_busproc;
185 198
199 hwif->cable_detect = tc86c001_cable_detect;
200
186 if (!hwif->dma_base) 201 if (!hwif->dma_base)
187 return; 202 return;
188 203
@@ -196,15 +211,6 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif)
196 hwif->rqsize = 0xffff; 211 hwif->rqsize = 0xffff;
197 212
198 hwif->dma_start = &tc86c001_dma_start; 213 hwif->dma_start = &tc86c001_dma_start;
199
200 if (hwif->cbl != ATA_CBL_PATA40_SHORT) {
201 /*
202 * System Control 1 Register bit 13 (PDIAGN):
203 * 0=80-pin cable, 1=40-pin cable
204 */
205 scr1 = inw(sc_base + 0x00);
206 hwif->cbl = (scr1 & 0x2000) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
207 }
208} 214}
209 215
210static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev, 216static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev,
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c
index 852b72693736..a67d02a3f96e 100644
--- a/drivers/ide/pci/triflex.c
+++ b/drivers/ide/pci/triflex.c
@@ -28,11 +28,6 @@
28#include <linux/types.h> 28#include <linux/types.h>
29#include <linux/module.h> 29#include <linux/module.h>
30#include <linux/kernel.h> 30#include <linux/kernel.h>
31#include <linux/delay.h>
32#include <linux/timer.h>
33#include <linux/mm.h>
34#include <linux/ioport.h>
35#include <linux/blkdev.h>
36#include <linux/hdreg.h> 31#include <linux/hdreg.h>
37#include <linux/pci.h> 32#include <linux/pci.h>
38#include <linux/ide.h> 33#include <linux/ide.h>
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c
index d9ebb698953a..de750f7a43e9 100644
--- a/drivers/ide/pci/trm290.c
+++ b/drivers/ide/pci/trm290.c
@@ -131,14 +131,12 @@
131#include <linux/types.h> 131#include <linux/types.h>
132#include <linux/module.h> 132#include <linux/module.h>
133#include <linux/kernel.h> 133#include <linux/kernel.h>
134#include <linux/mm.h>
135#include <linux/ioport.h> 134#include <linux/ioport.h>
136#include <linux/interrupt.h> 135#include <linux/interrupt.h>
137#include <linux/blkdev.h> 136#include <linux/blkdev.h>
138#include <linux/init.h> 137#include <linux/init.h>
139#include <linux/hdreg.h> 138#include <linux/hdreg.h>
140#include <linux/pci.h> 139#include <linux/pci.h>
141#include <linux/delay.h>
142#include <linux/ide.h> 140#include <linux/ide.h>
143 141
144#include <asm/io.h> 142#include <asm/io.h>
@@ -179,10 +177,7 @@ static void trm290_selectproc (ide_drive_t *drive)
179 177
180static void trm290_dma_exec_cmd(ide_drive_t *drive, u8 command) 178static void trm290_dma_exec_cmd(ide_drive_t *drive, u8 command)
181{ 179{
182 BUG_ON(HWGROUP(drive)->handler != NULL); /* paranoia check */ 180 ide_execute_command(drive, command, &ide_dma_intr, WAIT_CMD, NULL);
183 ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL);
184 /* issue cmd to drive */
185 outb(command, IDE_COMMAND_REG);
186} 181}
187 182
188static int trm290_dma_setup(ide_drive_t *drive) 183static int trm290_dma_setup(ide_drive_t *drive)
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c
index 24cb9047fb41..f3f79f805813 100644
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -26,15 +26,11 @@
26 26
27#include <linux/module.h> 27#include <linux/module.h>
28#include <linux/kernel.h> 28#include <linux/kernel.h>
29#include <linux/ioport.h>
30#include <linux/blkdev.h>
31#include <linux/pci.h> 29#include <linux/pci.h>
32#include <linux/init.h> 30#include <linux/init.h>
33#include <linux/ide.h> 31#include <linux/ide.h>
34#include <linux/dmi.h> 32#include <linux/dmi.h>
35 33
36#include <asm/io.h>
37
38#ifdef CONFIG_PPC_CHRP 34#ifdef CONFIG_PPC_CHRP
39#include <asm/processor.h> 35#include <asm/processor.h>
40#endif 36#endif
@@ -424,11 +420,7 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif)
424 hwif->set_pio_mode = &via_set_pio_mode; 420 hwif->set_pio_mode = &via_set_pio_mode;
425 hwif->set_dma_mode = &via_set_drive; 421 hwif->set_dma_mode = &via_set_drive;
426 422
427 if (!hwif->dma_base) 423 hwif->cable_detect = via82cxxx_cable_detect;
428 return;
429
430 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
431 hwif->cbl = via82cxxx_cable_detect(hwif);
432} 424}
433 425
434static const struct ide_port_info via82cxxx_chipset __devinitdata = { 426static const struct ide_port_info via82cxxx_chipset __devinitdata = {
diff --git a/drivers/ide/ppc/mpc8xx.c b/drivers/ide/ppc/mpc8xx.c
index 45c1d55e60df..06190b1c4ec5 100644
--- a/drivers/ide/ppc/mpc8xx.c
+++ b/drivers/ide/ppc/mpc8xx.c
@@ -848,7 +848,7 @@ static int __init mpc8xx_ide_probe(void)
848#endif 848#endif
849#endif 849#endif
850 850
851 ide_device_add(idx); 851 ide_device_add(idx, NULL);
852 852
853 return 0; 853 return 0;
854} 854}
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index 23112ef68f67..12ac3bfb4f9a 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -412,7 +412,7 @@ kauai_lookup_timing(struct kauai_timing* table, int cycle_time)
412 */ 412 */
413#define IDE_WAKEUP_DELAY (1*HZ) 413#define IDE_WAKEUP_DELAY (1*HZ)
414 414
415static void pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif); 415static int pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif);
416static int pmac_ide_build_dmatable(ide_drive_t *drive, struct request *rq); 416static int pmac_ide_build_dmatable(ide_drive_t *drive, struct request *rq);
417static void pmac_ide_selectproc(ide_drive_t *drive); 417static void pmac_ide_selectproc(ide_drive_t *drive);
418static void pmac_ide_kauai_selectproc(ide_drive_t *drive); 418static void pmac_ide_kauai_selectproc(ide_drive_t *drive);
@@ -1003,6 +1003,17 @@ pmac_ide_do_resume(ide_hwif_t *hwif)
1003 return 0; 1003 return 0;
1004} 1004}
1005 1005
1006static const struct ide_port_info pmac_port_info = {
1007 .chipset = ide_pmac,
1008 .host_flags = IDE_HFLAG_SET_PIO_MODE_KEEP_DMA |
1009 IDE_HFLAG_PIO_NO_DOWNGRADE |
1010 IDE_HFLAG_POST_SET_MODE |
1011 IDE_HFLAG_NO_DMA | /* no SFF-style DMA */
1012 IDE_HFLAG_UNMASK_IRQS,
1013 .pio_mask = ATA_PIO4,
1014 .mwdma_mask = ATA_MWDMA2,
1015};
1016
1006/* 1017/*
1007 * Setup, register & probe an IDE channel driven by this driver, this is 1018 * Setup, register & probe an IDE channel driven by this driver, this is
1008 * called by one of the 2 probe functions (macio or PCI). Note that a channel 1019 * called by one of the 2 probe functions (macio or PCI). Note that a channel
@@ -1016,23 +1027,28 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif, hw_regs_t *hw)
1016 struct device_node *np = pmif->node; 1027 struct device_node *np = pmif->node;
1017 const int *bidp; 1028 const int *bidp;
1018 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; 1029 u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
1030 struct ide_port_info d = pmac_port_info;
1019 1031
1020 pmif->cable_80 = 0; 1032 pmif->cable_80 = 0;
1021 pmif->broken_dma = pmif->broken_dma_warn = 0; 1033 pmif->broken_dma = pmif->broken_dma_warn = 0;
1022 if (of_device_is_compatible(np, "shasta-ata")) 1034 if (of_device_is_compatible(np, "shasta-ata")) {
1023 pmif->kind = controller_sh_ata6; 1035 pmif->kind = controller_sh_ata6;
1024 else if (of_device_is_compatible(np, "kauai-ata")) 1036 d.udma_mask = ATA_UDMA6;
1037 } else if (of_device_is_compatible(np, "kauai-ata")) {
1025 pmif->kind = controller_un_ata6; 1038 pmif->kind = controller_un_ata6;
1026 else if (of_device_is_compatible(np, "K2-UATA")) 1039 d.udma_mask = ATA_UDMA5;
1040 } else if (of_device_is_compatible(np, "K2-UATA")) {
1027 pmif->kind = controller_k2_ata6; 1041 pmif->kind = controller_k2_ata6;
1028 else if (of_device_is_compatible(np, "keylargo-ata")) { 1042 d.udma_mask = ATA_UDMA5;
1029 if (strcmp(np->name, "ata-4") == 0) 1043 } else if (of_device_is_compatible(np, "keylargo-ata")) {
1044 if (strcmp(np->name, "ata-4") == 0) {
1030 pmif->kind = controller_kl_ata4; 1045 pmif->kind = controller_kl_ata4;
1031 else 1046 d.udma_mask = ATA_UDMA4;
1047 } else
1032 pmif->kind = controller_kl_ata3; 1048 pmif->kind = controller_kl_ata3;
1033 } else if (of_device_is_compatible(np, "heathrow-ata")) 1049 } else if (of_device_is_compatible(np, "heathrow-ata")) {
1034 pmif->kind = controller_heathrow; 1050 pmif->kind = controller_heathrow;
1035 else { 1051 } else {
1036 pmif->kind = controller_ohare; 1052 pmif->kind = controller_ohare;
1037 pmif->broken_dma = 1; 1053 pmif->broken_dma = 1;
1038 } 1054 }
@@ -1101,19 +1117,10 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif, hw_regs_t *hw)
1101 /* Tell common code _not_ to mess with resources */ 1117 /* Tell common code _not_ to mess with resources */
1102 hwif->mmio = 1; 1118 hwif->mmio = 1;
1103 hwif->hwif_data = pmif; 1119 hwif->hwif_data = pmif;
1104 hw->chipset = ide_pmac;
1105 ide_init_port_hw(hwif, hw); 1120 ide_init_port_hw(hwif, hw);
1106 hwif->noprobe = pmif->mediabay; 1121 hwif->noprobe = pmif->mediabay;
1107 hwif->hold = pmif->mediabay; 1122 hwif->hold = pmif->mediabay;
1108 hwif->cbl = pmif->cable_80 ? ATA_CBL_PATA80 : ATA_CBL_PATA40; 1123 hwif->cbl = pmif->cable_80 ? ATA_CBL_PATA80 : ATA_CBL_PATA40;
1109 hwif->drives[0].unmask = 1;
1110 hwif->drives[1].unmask = 1;
1111 hwif->drives[0].autotune = IDE_TUNE_AUTO;
1112 hwif->drives[1].autotune = IDE_TUNE_AUTO;
1113 hwif->host_flags = IDE_HFLAG_SET_PIO_MODE_KEEP_DMA |
1114 IDE_HFLAG_PIO_NO_DOWNGRADE |
1115 IDE_HFLAG_POST_SET_MODE;
1116 hwif->pio_mask = ATA_PIO4;
1117 hwif->set_pio_mode = pmac_ide_set_pio_mode; 1124 hwif->set_pio_mode = pmac_ide_set_pio_mode;
1118 if (pmif->kind == controller_un_ata6 1125 if (pmif->kind == controller_un_ata6
1119 || pmif->kind == controller_k2_ata6 1126 || pmif->kind == controller_k2_ata6
@@ -1133,14 +1140,16 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif, hw_regs_t *hw)
1133#endif /* CONFIG_PMAC_MEDIABAY */ 1140#endif /* CONFIG_PMAC_MEDIABAY */
1134 1141
1135#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC 1142#ifdef CONFIG_BLK_DEV_IDEDMA_PMAC
1143 if (pmif->cable_80 == 0)
1144 d.udma_mask &= ATA_UDMA2;
1136 /* has a DBDMA controller channel */ 1145 /* has a DBDMA controller channel */
1137 if (pmif->dma_regs) 1146 if (pmif->dma_regs == 0 || pmac_ide_setup_dma(pmif, hwif) < 0)
1138 pmac_ide_setup_dma(pmif, hwif); 1147#endif
1139#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ 1148 d.udma_mask = d.mwdma_mask = 0;
1140 1149
1141 idx[0] = hwif->index; 1150 idx[0] = hwif->index;
1142 1151
1143 ide_device_add(idx); 1152 ide_device_add(idx, &d);
1144 1153
1145 return 0; 1154 return 0;
1146} 1155}
@@ -1721,8 +1730,7 @@ pmac_ide_dma_lost_irq (ide_drive_t *drive)
1721 * Allocate the data structures needed for using DMA with an interface 1730 * Allocate the data structures needed for using DMA with an interface
1722 * and fill the proper list of functions pointers 1731 * and fill the proper list of functions pointers
1723 */ 1732 */
1724static void __devinit 1733static int __devinit pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1725pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1726{ 1734{
1727 struct pci_dev *dev = to_pci_dev(hwif->dev); 1735 struct pci_dev *dev = to_pci_dev(hwif->dev);
1728 1736
@@ -1730,7 +1738,7 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1730 * DMA routines ... 1738 * DMA routines ...
1731 */ 1739 */
1732 if (dev == NULL) 1740 if (dev == NULL)
1733 return; 1741 return -ENODEV;
1734 /* 1742 /*
1735 * Allocate space for the DBDMA commands. 1743 * Allocate space for the DBDMA commands.
1736 * The +2 is +1 for the stop command and +1 to allow for 1744 * The +2 is +1 for the stop command and +1 to allow for
@@ -1743,7 +1751,7 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1743 if (pmif->dma_table_cpu == NULL) { 1751 if (pmif->dma_table_cpu == NULL) {
1744 printk(KERN_ERR "%s: unable to allocate DMA command list\n", 1752 printk(KERN_ERR "%s: unable to allocate DMA command list\n",
1745 hwif->name); 1753 hwif->name);
1746 return; 1754 return -ENOMEM;
1747 } 1755 }
1748 1756
1749 hwif->sg_max_nents = MAX_DCMDS; 1757 hwif->sg_max_nents = MAX_DCMDS;
@@ -1757,29 +1765,7 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1757 hwif->dma_timeout = &ide_dma_timeout; 1765 hwif->dma_timeout = &ide_dma_timeout;
1758 hwif->dma_lost_irq = &pmac_ide_dma_lost_irq; 1766 hwif->dma_lost_irq = &pmac_ide_dma_lost_irq;
1759 1767
1760 switch(pmif->kind) { 1768 return 0;
1761 case controller_sh_ata6:
1762 hwif->ultra_mask = pmif->cable_80 ? 0x7f : 0x07;
1763 hwif->mwdma_mask = 0x07;
1764 hwif->swdma_mask = 0x00;
1765 break;
1766 case controller_un_ata6:
1767 case controller_k2_ata6:
1768 hwif->ultra_mask = pmif->cable_80 ? 0x3f : 0x07;
1769 hwif->mwdma_mask = 0x07;
1770 hwif->swdma_mask = 0x00;
1771 break;
1772 case controller_kl_ata4:
1773 hwif->ultra_mask = pmif->cable_80 ? 0x1f : 0x07;
1774 hwif->mwdma_mask = 0x07;
1775 hwif->swdma_mask = 0x00;
1776 break;
1777 default:
1778 hwif->ultra_mask = 0x00;
1779 hwif->mwdma_mask = 0x07;
1780 hwif->swdma_mask = 0x00;
1781 break;
1782 }
1783} 1769}
1784 1770
1785#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ 1771#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c
index 05db429a7da8..634e3f6a9608 100644
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -339,7 +339,8 @@ static int ide_pci_check_iomem(struct pci_dev *dev, const struct ide_port_info *
339 * ide_hwif_configure - configure an IDE interface 339 * ide_hwif_configure - configure an IDE interface
340 * @dev: PCI device holding interface 340 * @dev: PCI device holding interface
341 * @d: IDE port info 341 * @d: IDE port info
342 * @mate: Paired interface if any 342 * @port: port number
343 * @irq: PCI IRQ
343 * 344 *
344 * Perform the initial set up for the hardware interface structure. This 345 * Perform the initial set up for the hardware interface structure. This
345 * is done per interface port rather than per PCI device. There may be 346 * is done per interface port rather than per PCI device. There may be
@@ -348,7 +349,9 @@ static int ide_pci_check_iomem(struct pci_dev *dev, const struct ide_port_info *
348 * Returns the new hardware interface structure, or NULL on a failure 349 * Returns the new hardware interface structure, or NULL on a failure
349 */ 350 */
350 351
351static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, const struct ide_port_info *d, ide_hwif_t *mate, int port, int irq) 352static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev,
353 const struct ide_port_info *d,
354 unsigned int port, int irq)
352{ 355{
353 unsigned long ctl = 0, base = 0; 356 unsigned long ctl = 0, base = 0;
354 ide_hwif_t *hwif; 357 ide_hwif_t *hwif;
@@ -394,29 +397,24 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, const struct ide_port
394 397
395 hwif->dev = &dev->dev; 398 hwif->dev = &dev->dev;
396 hwif->cds = d; 399 hwif->cds = d;
397 hwif->channel = port;
398 400
399 if (mate) {
400 hwif->mate = mate;
401 mate->mate = hwif;
402 }
403 return hwif; 401 return hwif;
404} 402}
405 403
404#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
406/** 405/**
407 * ide_hwif_setup_dma - configure DMA interface 406 * ide_hwif_setup_dma - configure DMA interface
408 * @dev: PCI device
409 * @d: IDE port info
410 * @hwif: IDE interface 407 * @hwif: IDE interface
408 * @d: IDE port info
411 * 409 *
412 * Set up the DMA base for the interface. Enable the master bits as 410 * Set up the DMA base for the interface. Enable the master bits as
413 * necessary and attempt to bring the device DMA into a ready to use 411 * necessary and attempt to bring the device DMA into a ready to use
414 * state 412 * state
415 */ 413 */
416 414
417static void ide_hwif_setup_dma(struct pci_dev *dev, const struct ide_port_info *d, ide_hwif_t *hwif) 415void ide_hwif_setup_dma(ide_hwif_t *hwif, const struct ide_port_info *d)
418{ 416{
419#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 417 struct pci_dev *dev = to_pci_dev(hwif->dev);
420 u16 pcicmd; 418 u16 pcicmd;
421 419
422 pci_read_config_word(dev, PCI_COMMAND, &pcicmd); 420 pci_read_config_word(dev, PCI_COMMAND, &pcicmd);
@@ -448,8 +446,8 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, const struct ide_port_info *
448 "(BIOS)\n", hwif->name, d->name); 446 "(BIOS)\n", hwif->name, d->name);
449 } 447 }
450 } 448 }
451#endif /* CONFIG_BLK_DEV_IDEDMA_PCI*/
452} 449}
450#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */
453 451
454/** 452/**
455 * ide_setup_pci_controller - set up IDE PCI 453 * ide_setup_pci_controller - set up IDE PCI
@@ -511,7 +509,7 @@ out:
511void ide_pci_setup_ports(struct pci_dev *dev, const struct ide_port_info *d, int pciirq, u8 *idx) 509void ide_pci_setup_ports(struct pci_dev *dev, const struct ide_port_info *d, int pciirq, u8 *idx)
512{ 510{
513 int channels = (d->host_flags & IDE_HFLAG_SINGLE) ? 1 : 2, port; 511 int channels = (d->host_flags & IDE_HFLAG_SINGLE) ? 1 : 2, port;
514 ide_hwif_t *hwif, *mate = NULL; 512 ide_hwif_t *hwif;
515 u8 tmp; 513 u8 tmp;
516 514
517 /* 515 /*
@@ -527,56 +525,11 @@ void ide_pci_setup_ports(struct pci_dev *dev, const struct ide_port_info *d, int
527 continue; /* port not enabled */ 525 continue; /* port not enabled */
528 } 526 }
529 527
530 if ((hwif = ide_hwif_configure(dev, d, mate, port, pciirq)) == NULL) 528 hwif = ide_hwif_configure(dev, d, port, pciirq);
529 if (hwif == NULL)
531 continue; 530 continue;
532 531
533 *(idx + port) = hwif->index; 532 *(idx + port) = hwif->index;
534
535 if (d->init_iops)
536 d->init_iops(hwif);
537
538 if ((d->host_flags & IDE_HFLAG_NO_DMA) == 0)
539 ide_hwif_setup_dma(dev, d, hwif);
540
541 if ((!hwif->irq && (d->host_flags & IDE_HFLAG_LEGACY_IRQS)) ||
542 (d->host_flags & IDE_HFLAG_FORCE_LEGACY_IRQS))
543 hwif->irq = port ? 15 : 14;
544
545 hwif->host_flags = d->host_flags;
546 hwif->pio_mask = d->pio_mask;
547
548 if ((d->host_flags & IDE_HFLAG_SERIALIZE) && hwif->mate)
549 hwif->mate->serialized = hwif->serialized = 1;
550
551 if (d->host_flags & IDE_HFLAG_IO_32BIT) {
552 hwif->drives[0].io_32bit = 1;
553 hwif->drives[1].io_32bit = 1;
554 }
555
556 if (d->host_flags & IDE_HFLAG_UNMASK_IRQS) {
557 hwif->drives[0].unmask = 1;
558 hwif->drives[1].unmask = 1;
559 }
560
561 if (hwif->dma_base) {
562 hwif->swdma_mask = d->swdma_mask;
563 hwif->mwdma_mask = d->mwdma_mask;
564 hwif->ultra_mask = d->udma_mask;
565 }
566
567 hwif->drives[0].autotune = 1;
568 hwif->drives[1].autotune = 1;
569
570 if (d->host_flags & IDE_HFLAG_RQSIZE_256)
571 hwif->rqsize = 256;
572
573 if (d->init_hwif)
574 /* Call chipset-specific routine
575 * for each enabled hwif
576 */
577 d->init_hwif(hwif);
578
579 mate = hwif;
580 } 533 }
581} 534}
582 535
@@ -658,7 +611,7 @@ int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d)
658 ret = do_ide_setup_pci_device(dev, d, &idx[0], 1); 611 ret = do_ide_setup_pci_device(dev, d, &idx[0], 1);
659 612
660 if (ret >= 0) 613 if (ret >= 0)
661 ide_device_add(idx); 614 ide_device_add(idx, d);
662 615
663 return ret; 616 return ret;
664} 617}
@@ -682,7 +635,7 @@ int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2,
682 goto out; 635 goto out;
683 } 636 }
684 637
685 ide_device_add(idx); 638 ide_device_add(idx, d);
686out: 639out:
687 return ret; 640 return ret;
688} 641}
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c
index 18dde2a27209..de9ebbfbf122 100644
--- a/drivers/macintosh/mediabay.c
+++ b/drivers/macintosh/mediabay.c
@@ -595,7 +595,7 @@ static void media_bay_step(int i)
595 if (bay->cd_index >= 0) { 595 if (bay->cd_index >= 0) {
596 printk(KERN_DEBUG "Unregistering mb %d ide, index:%d\n", i, 596 printk(KERN_DEBUG "Unregistering mb %d ide, index:%d\n", i,
597 bay->cd_index); 597 bay->cd_index);
598 ide_unregister(bay->cd_index); 598 ide_unregister(bay->cd_index, 1, 1);
599 bay->cd_index = -1; 599 bay->cd_index = -1;
600 } 600 }
601 if (bay->cd_retry) { 601 if (bay->cd_retry) {
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 5ed00069846d..6c4f0f081785 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -588,19 +588,14 @@ static ide_startstop_t idescsi_issue_pc (ide_drive_t *drive, idescsi_pc_t *pc)
588 hwif->sg_mapped = 0; 588 hwif->sg_mapped = 0;
589 } 589 }
590 590
591 SELECT_DRIVE(drive);
592
593 ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK, bcount, dma); 591 ide_pktcmd_tf_load(drive, IDE_TFLAG_NO_SELECT_MASK, bcount, dma);
594 592
595 if (dma) 593 if (dma)
596 set_bit(PC_DMA_OK, &pc->flags); 594 set_bit(PC_DMA_OK, &pc->flags);
597 595
598 if (test_bit(IDESCSI_DRQ_INTERRUPT, &scsi->flags)) { 596 if (test_bit(IDESCSI_DRQ_INTERRUPT, &scsi->flags)) {
599 BUG_ON(HWGROUP(drive)->handler != NULL); 597 ide_execute_command(drive, WIN_PACKETCMD, &idescsi_transfer_pc,
600 ide_set_handler(drive, &idescsi_transfer_pc, 598 get_timeout(pc), idescsi_expiry);
601 get_timeout(pc), idescsi_expiry);
602 /* Issue the packet command */
603 HWIF(drive)->OUTB(WIN_PACKETCMD, IDE_COMMAND_REG);
604 return ide_started; 599 return ide_started;
605 } else { 600 } else {
606 /* Issue the packet command */ 601 /* Issue the packet command */
diff --git a/include/linux/hdreg.h b/include/linux/hdreg.h
index ff43f8d6b5b3..3882013d29ea 100644
--- a/include/linux/hdreg.h
+++ b/include/linux/hdreg.h
@@ -706,8 +706,10 @@ struct hd_driveid {
706 */ 706 */
707#define IDE_NICE_DSC_OVERLAP (0) /* per the DSC overlap protocol */ 707#define IDE_NICE_DSC_OVERLAP (0) /* per the DSC overlap protocol */
708#define IDE_NICE_ATAPI_OVERLAP (1) /* not supported yet */ 708#define IDE_NICE_ATAPI_OVERLAP (1) /* not supported yet */
709#define IDE_NICE_0 (2) /* when sure that it won't affect us */
710#define IDE_NICE_1 (3) /* when probably won't affect us much */ 709#define IDE_NICE_1 (3) /* when probably won't affect us much */
710#ifndef __KERNEL__
711#define IDE_NICE_0 (2) /* when sure that it won't affect us */
711#define IDE_NICE_2 (4) /* when we know it's on our expense */ 712#define IDE_NICE_2 (4) /* when we know it's on our expense */
713#endif
712 714
713#endif /* _LINUX_HDREG_H */ 715#endif /* _LINUX_HDREG_H */
diff --git a/include/linux/ide.h b/include/linux/ide.h
index ec10b2a3bb6e..367c17084a28 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -112,18 +112,12 @@ typedef unsigned char byte; /* used everywhere */
112#define SATA_NR_PORTS (3) /* 16 possible ?? */ 112#define SATA_NR_PORTS (3) /* 16 possible ?? */
113 113
114#define SATA_STATUS_OFFSET (0) 114#define SATA_STATUS_OFFSET (0)
115#define SATA_STATUS_REG (HWIF(drive)->sata_scr[SATA_STATUS_OFFSET])
116#define SATA_ERROR_OFFSET (1) 115#define SATA_ERROR_OFFSET (1)
117#define SATA_ERROR_REG (HWIF(drive)->sata_scr[SATA_ERROR_OFFSET])
118#define SATA_CONTROL_OFFSET (2) 116#define SATA_CONTROL_OFFSET (2)
119#define SATA_CONTROL_REG (HWIF(drive)->sata_scr[SATA_CONTROL_OFFSET])
120 117
121#define SATA_MISC_OFFSET (0) 118#define SATA_MISC_OFFSET (0)
122#define SATA_MISC_REG (HWIF(drive)->sata_misc[SATA_MISC_OFFSET])
123#define SATA_PHY_OFFSET (1) 119#define SATA_PHY_OFFSET (1)
124#define SATA_PHY_REG (HWIF(drive)->sata_misc[SATA_PHY_OFFSET])
125#define SATA_IEN_OFFSET (2) 120#define SATA_IEN_OFFSET (2)
126#define SATA_IEN_REG (HWIF(drive)->sata_misc[SATA_IEN_OFFSET])
127 121
128/* 122/*
129 * Our Physical Region Descriptor (PRD) table should be large enough 123 * Our Physical Region Descriptor (PRD) table should be large enough
@@ -196,6 +190,7 @@ typedef struct hw_regs_s {
196} hw_regs_t; 190} hw_regs_t;
197 191
198struct hwif_s * ide_find_port(unsigned long); 192struct hwif_s * ide_find_port(unsigned long);
193struct hwif_s *ide_deprecated_find_port(unsigned long);
199void ide_init_port_data(struct hwif_s *, unsigned int); 194void ide_init_port_data(struct hwif_s *, unsigned int);
200void ide_init_port_hw(struct hwif_s *, hw_regs_t *); 195void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
201 196
@@ -406,8 +401,6 @@ typedef struct ide_drive_s {
406 unsigned no_unmask : 1; /* disallow setting unmask bit */ 401 unsigned no_unmask : 1; /* disallow setting unmask bit */
407 unsigned no_io_32bit : 1; /* disallow enabling 32bit I/O */ 402 unsigned no_io_32bit : 1; /* disallow enabling 32bit I/O */
408 unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */ 403 unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */
409 unsigned nice0 : 1; /* give obvious excess bandwidth */
410 unsigned nice2 : 1; /* give a share in our own bandwidth */
411 unsigned doorlocking : 1; /* for removable only: door lock/unlock works */ 404 unsigned doorlocking : 1; /* for removable only: door lock/unlock works */
412 unsigned nodma : 1; /* disallow DMA */ 405 unsigned nodma : 1; /* disallow DMA */
413 unsigned autotune : 2; /* 0=default, 1=autotune, 2=noautotune */ 406 unsigned autotune : 2; /* 0=default, 1=autotune, 2=noautotune */
@@ -487,7 +480,6 @@ typedef struct hwif_s {
487 u8 major; /* our major number */ 480 u8 major; /* our major number */
488 u8 index; /* 0 for ide0; 1 for ide1; ... */ 481 u8 index; /* 0 for ide0; 1 for ide1; ... */
489 u8 channel; /* for dual-port chips: 0=primary, 1=secondary */ 482 u8 channel; /* for dual-port chips: 0=primary, 1=secondary */
490 u8 straight8; /* Alan's straight 8 check */
491 u8 bus_state; /* power state of the IDE bus */ 483 u8 bus_state; /* power state of the IDE bus */
492 484
493 u32 host_flags; 485 u32 host_flags;
@@ -513,6 +505,8 @@ typedef struct hwif_s {
513#if 0 505#if 0
514 ide_hwif_ops_t *hwifops; 506 ide_hwif_ops_t *hwifops;
515#else 507#else
508 /* host specific initialization of devices on a port */
509 void (*port_init_devs)(struct hwif_s *);
516 /* routine to program host for PIO mode */ 510 /* routine to program host for PIO mode */
517 void (*set_pio_mode)(ide_drive_t *, const u8); 511 void (*set_pio_mode)(ide_drive_t *, const u8);
518 /* routine to program host for DMA mode */ 512 /* routine to program host for DMA mode */
@@ -535,6 +529,8 @@ typedef struct hwif_s {
535 u8 (*mdma_filter)(ide_drive_t *); 529 u8 (*mdma_filter)(ide_drive_t *);
536 u8 (*udma_filter)(ide_drive_t *); 530 u8 (*udma_filter)(ide_drive_t *);
537 531
532 u8 (*cable_detect)(struct hwif_s *);
533
538 void (*ata_input_data)(ide_drive_t *, void *, u32); 534 void (*ata_input_data)(ide_drive_t *, void *, u32);
539 void (*ata_output_data)(ide_drive_t *, void *, u32); 535 void (*ata_output_data)(ide_drive_t *, void *, u32);
540 536
@@ -602,10 +598,9 @@ typedef struct hwif_s {
602 unsigned serialized : 1; /* serialized all channel operation */ 598 unsigned serialized : 1; /* serialized all channel operation */
603 unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ 599 unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */
604 unsigned reset : 1; /* reset after probe */ 600 unsigned reset : 1; /* reset after probe */
605 unsigned auto_poll : 1; /* supports nop auto-poll */
606 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ 601 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
607 unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
608 unsigned mmio : 1; /* host uses MMIO */ 602 unsigned mmio : 1; /* host uses MMIO */
603 unsigned straight8 : 1; /* Alan's straight 8 check */
609 604
610 struct device gendev; 605 struct device gendev;
611 struct completion gendev_rel_comp; /* To deal with device release() */ 606 struct completion gendev_rel_comp; /* To deal with device release() */
@@ -625,6 +620,9 @@ typedef struct hwif_s {
625typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); 620typedef ide_startstop_t (ide_handler_t)(ide_drive_t *);
626typedef int (ide_expiry_t)(ide_drive_t *); 621typedef int (ide_expiry_t)(ide_drive_t *);
627 622
623/* used by ide-cd, ide-floppy, etc. */
624typedef void (xfer_func_t)(ide_drive_t *, void *, u32);
625
628typedef struct hwgroup_s { 626typedef struct hwgroup_s {
629 /* irq handler, if active */ 627 /* irq handler, if active */
630 ide_startstop_t (*handler)(ide_drive_t *); 628 ide_startstop_t (*handler)(ide_drive_t *);
@@ -708,6 +706,7 @@ typedef struct {
708void proc_ide_create(void); 706void proc_ide_create(void);
709void proc_ide_destroy(void); 707void proc_ide_destroy(void);
710void ide_proc_register_port(ide_hwif_t *); 708void ide_proc_register_port(ide_hwif_t *);
709void ide_proc_port_register_devices(ide_hwif_t *);
711void ide_proc_unregister_port(ide_hwif_t *); 710void ide_proc_unregister_port(ide_hwif_t *);
712void ide_proc_register_driver(ide_drive_t *, ide_driver_t *); 711void ide_proc_register_driver(ide_drive_t *, ide_driver_t *);
713void ide_proc_unregister_driver(ide_drive_t *, ide_driver_t *); 712void ide_proc_unregister_driver(ide_drive_t *, ide_driver_t *);
@@ -740,6 +739,7 @@ void ide_pci_create_host_proc(const char *, get_info_t *);
740static inline void proc_ide_create(void) { ; } 739static inline void proc_ide_create(void) { ; }
741static inline void proc_ide_destroy(void) { ; } 740static inline void proc_ide_destroy(void) { ; }
742static inline void ide_proc_register_port(ide_hwif_t *hwif) { ; } 741static inline void ide_proc_register_port(ide_hwif_t *hwif) { ; }
742static inline void ide_proc_port_register_devices(ide_hwif_t *hwif) { ; }
743static inline void ide_proc_unregister_port(ide_hwif_t *hwif) { ; } 743static inline void ide_proc_unregister_port(ide_hwif_t *hwif) { ; }
744static inline void ide_proc_register_driver(ide_drive_t *drive, ide_driver_t *driver) { ; } 744static inline void ide_proc_register_driver(ide_drive_t *drive, ide_driver_t *driver) { ; }
745static inline void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver) { ; } 745static inline void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver) { ; }
@@ -988,10 +988,8 @@ int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long);
988extern int system_bus_clock(void); 988extern int system_bus_clock(void);
989 989
990extern int ide_driveid_update(ide_drive_t *); 990extern int ide_driveid_update(ide_drive_t *);
991extern int ide_ata66_check(ide_drive_t *, ide_task_t *);
992extern int ide_config_drive_speed(ide_drive_t *, u8); 991extern int ide_config_drive_speed(ide_drive_t *, u8);
993extern u8 eighty_ninty_three (ide_drive_t *); 992extern u8 eighty_ninty_three (ide_drive_t *);
994extern int set_transfer(ide_drive_t *, ide_task_t *);
995extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *); 993extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *);
996 994
997extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout); 995extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout);
@@ -1016,6 +1014,13 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o
1016void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *); 1014void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 *);
1017void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); 1015void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *);
1018 1016
1017#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
1018void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *);
1019#else
1020static inline void ide_hwif_setup_dma(ide_hwif_t *hwif,
1021 const struct ide_port_info *d) { }
1022#endif
1023
1019extern void default_hwif_iops(ide_hwif_t *); 1024extern void default_hwif_iops(ide_hwif_t *);
1020extern void default_hwif_mmiops(ide_hwif_t *); 1025extern void default_hwif_mmiops(ide_hwif_t *);
1021extern void default_hwif_transport(ide_hwif_t *); 1026extern void default_hwif_transport(ide_hwif_t *);
@@ -1052,7 +1057,7 @@ enum {
1052 IDE_HFLAG_NO_SET_MODE = (1 << 9), 1057 IDE_HFLAG_NO_SET_MODE = (1 << 9),
1053 /* trust BIOS for programming chipset/device for DMA */ 1058 /* trust BIOS for programming chipset/device for DMA */
1054 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10), 1059 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10),
1055 /* host uses VDMA */ 1060 /* host uses VDMA (tied with IDE_HFLAG_CS5520 for now) */
1056 IDE_HFLAG_VDMA = (1 << 11), 1061 IDE_HFLAG_VDMA = (1 << 11),
1057 /* ATAPI DMA is unsupported */ 1062 /* ATAPI DMA is unsupported */
1058 IDE_HFLAG_NO_ATAPI_DMA = (1 << 12), 1063 IDE_HFLAG_NO_ATAPI_DMA = (1 << 12),
@@ -1062,8 +1067,10 @@ enum {
1062 IDE_HFLAG_NO_DMA = (1 << 14), 1067 IDE_HFLAG_NO_DMA = (1 << 14),
1063 /* check if host is PCI IDE device before allowing DMA */ 1068 /* check if host is PCI IDE device before allowing DMA */
1064 IDE_HFLAG_NO_AUTODMA = (1 << 15), 1069 IDE_HFLAG_NO_AUTODMA = (1 << 15),
1070 /* don't autotune PIO */
1071 IDE_HFLAG_NO_AUTOTUNE = (1 << 16),
1065 /* host is CS5510/CS5520 */ 1072 /* host is CS5510/CS5520 */
1066 IDE_HFLAG_CS5520 = (1 << 16), 1073 IDE_HFLAG_CS5520 = IDE_HFLAG_VDMA,
1067 /* no LBA48 */ 1074 /* no LBA48 */
1068 IDE_HFLAG_NO_LBA48 = (1 << 17), 1075 IDE_HFLAG_NO_LBA48 = (1 << 17),
1069 /* no LBA48 DMA */ 1076 /* no LBA48 DMA */
@@ -1089,6 +1096,10 @@ enum {
1089 IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), 1096 IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28),
1090 /* DSC overlap is unsupported */ 1097 /* DSC overlap is unsupported */
1091 IDE_HFLAG_NO_DSC = (1 << 29), 1098 IDE_HFLAG_NO_DSC = (1 << 29),
1099 /* never use 32-bit I/O ops */
1100 IDE_HFLAG_NO_IO_32BIT = (1 << 30),
1101 /* never unmask IRQs */
1102 IDE_HFLAG_NO_UNMASK_IRQS = (1 << 31),
1092}; 1103};
1093 1104
1094#ifdef CONFIG_BLK_DEV_OFFBOARD 1105#ifdef CONFIG_BLK_DEV_OFFBOARD
@@ -1144,6 +1155,7 @@ void ide_dma_off_quietly(ide_drive_t *);
1144void ide_dma_off(ide_drive_t *); 1155void ide_dma_off(ide_drive_t *);
1145void ide_dma_on(ide_drive_t *); 1156void ide_dma_on(ide_drive_t *);
1146int ide_set_dma(ide_drive_t *); 1157int ide_set_dma(ide_drive_t *);
1158void ide_check_dma_crc(ide_drive_t *);
1147ide_startstop_t ide_dma_intr(ide_drive_t *); 1159ide_startstop_t ide_dma_intr(ide_drive_t *);
1148 1160
1149int ide_build_sglist(ide_drive_t *, struct request *); 1161int ide_build_sglist(ide_drive_t *, struct request *);
@@ -1171,6 +1183,7 @@ static inline void ide_dma_off(ide_drive_t *drive) { ; }
1171static inline void ide_dma_on(ide_drive_t *drive) { ; } 1183static inline void ide_dma_on(ide_drive_t *drive) { ; }
1172static inline void ide_dma_verbose(ide_drive_t *drive) { ; } 1184static inline void ide_dma_verbose(ide_drive_t *drive) { ; }
1173static inline int ide_set_dma(ide_drive_t *drive) { return 1; } 1185static inline int ide_set_dma(ide_drive_t *drive) { return 1; }
1186static inline void ide_check_dma_crc(ide_drive_t *drive) { ; }
1174#endif /* CONFIG_BLK_DEV_IDEDMA */ 1187#endif /* CONFIG_BLK_DEV_IDEDMA */
1175 1188
1176#ifndef CONFIG_BLK_DEV_IDEDMA_PCI 1189#ifndef CONFIG_BLK_DEV_IDEDMA_PCI
@@ -1182,27 +1195,29 @@ extern int ide_acpi_exec_tfs(ide_drive_t *drive);
1182extern void ide_acpi_get_timing(ide_hwif_t *hwif); 1195extern void ide_acpi_get_timing(ide_hwif_t *hwif);
1183extern void ide_acpi_push_timing(ide_hwif_t *hwif); 1196extern void ide_acpi_push_timing(ide_hwif_t *hwif);
1184extern void ide_acpi_init(ide_hwif_t *hwif); 1197extern void ide_acpi_init(ide_hwif_t *hwif);
1198void ide_acpi_port_init_devices(ide_hwif_t *);
1185extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); 1199extern void ide_acpi_set_state(ide_hwif_t *hwif, int on);
1186#else 1200#else
1187static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } 1201static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; }
1188static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } 1202static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; }
1189static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } 1203static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; }
1190static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } 1204static inline void ide_acpi_init(ide_hwif_t *hwif) { ; }
1205static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; }
1191static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} 1206static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {}
1192#endif 1207#endif
1193 1208
1194void ide_remove_port_from_hwgroup(ide_hwif_t *); 1209void ide_remove_port_from_hwgroup(ide_hwif_t *);
1195extern int ide_hwif_request_regions(ide_hwif_t *hwif); 1210extern int ide_hwif_request_regions(ide_hwif_t *hwif);
1196extern void ide_hwif_release_regions(ide_hwif_t* hwif); 1211extern void ide_hwif_release_regions(ide_hwif_t* hwif);
1197extern void ide_unregister (unsigned int index); 1212void ide_unregister(unsigned int, int, int);
1198 1213
1199void ide_register_region(struct gendisk *); 1214void ide_register_region(struct gendisk *);
1200void ide_unregister_region(struct gendisk *); 1215void ide_unregister_region(struct gendisk *);
1201 1216
1202void ide_undecoded_slave(ide_drive_t *); 1217void ide_undecoded_slave(ide_drive_t *);
1203 1218
1204int ide_device_add_all(u8 *idx); 1219int ide_device_add_all(u8 *idx, const struct ide_port_info *);
1205int ide_device_add(u8 idx[4]); 1220int ide_device_add(u8 idx[4], const struct ide_port_info *);
1206 1221
1207static inline void *ide_get_hwifdata (ide_hwif_t * hwif) 1222static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
1208{ 1223{