diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2008-01-19 10:51:26 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-20 00:29:39 -0500 |
commit | aa8f2371c564fc9b289dab3a8ecd93212d021fd2 (patch) | |
tree | e8a8cd8e623ec37b68a0d7d9345b80898ceaa1f4 /drivers/ata | |
parent | 5db501d7e398c6a838a307adf0347cf6a2b015a3 (diff) |
pata_pdc202xx_old: Fix crashes with ATAPI
The PDC202xx older devices do not support ATAPI DMA via the usual
interfaces. What documentation I have isn't sufficient to support DMA and
it isn't clear if the Windows drivers do this or it is possible at all.
(Neither do the drivers/ide old drivers)
So turn it ATAPI DMA off, these are disk optimised controllers.
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/pata_pdc202xx_old.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c index 8f2815601791..6c9689b59b06 100644 --- a/drivers/ata/pata_pdc202xx_old.c +++ b/drivers/ata/pata_pdc202xx_old.c | |||
@@ -244,6 +244,24 @@ static int pdc2026x_port_start(struct ata_port *ap) | |||
244 | return ata_sff_port_start(ap); | 244 | return ata_sff_port_start(ap); |
245 | } | 245 | } |
246 | 246 | ||
247 | /** | ||
248 | * pdc2026x_check_atapi_dma - Check whether ATAPI DMA can be supported for this command | ||
249 | * @qc: Metadata associated with taskfile to check | ||
250 | * | ||
251 | * Just say no - not supported on older Promise. | ||
252 | * | ||
253 | * LOCKING: | ||
254 | * None (inherited from caller). | ||
255 | * | ||
256 | * RETURNS: 0 when ATAPI DMA can be used | ||
257 | * 1 otherwise | ||
258 | */ | ||
259 | |||
260 | static int pdc2026x_check_atapi_dma(struct ata_queued_cmd *qc) | ||
261 | { | ||
262 | return 1; | ||
263 | } | ||
264 | |||
247 | static struct scsi_host_template pdc202xx_sht = { | 265 | static struct scsi_host_template pdc202xx_sht = { |
248 | .module = THIS_MODULE, | 266 | .module = THIS_MODULE, |
249 | .name = DRV_NAME, | 267 | .name = DRV_NAME, |
@@ -311,6 +329,7 @@ static struct ata_port_operations pdc2026x_port_ops = { | |||
311 | .post_internal_cmd = ata_bmdma_post_internal_cmd, | 329 | .post_internal_cmd = ata_bmdma_post_internal_cmd, |
312 | .cable_detect = pdc2026x_cable_detect, | 330 | .cable_detect = pdc2026x_cable_detect, |
313 | 331 | ||
332 | .check_atapi_dma= pdc2026x_check_atapi_dma, | ||
314 | .bmdma_setup = ata_bmdma_setup, | 333 | .bmdma_setup = ata_bmdma_setup, |
315 | .bmdma_start = pdc2026x_bmdma_start, | 334 | .bmdma_start = pdc2026x_bmdma_start, |
316 | .bmdma_stop = pdc2026x_bmdma_stop, | 335 | .bmdma_stop = pdc2026x_bmdma_stop, |