diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 19:36:05 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 19:36:05 -0700 |
commit | 5f737085beea3a5c5b6f44a16e6d3e2fd03095e0 (patch) | |
tree | 218643043a16f9af32b2b1037ddbb3ecd271c779 /drivers/ide/ide-taskfile.c | |
parent | e9a404580ccaeb31dd2a976f9929c4f9eb6f3540 (diff) | |
parent | 276d789e1794560d7ce53a7f2687415e2a80bb8a (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6: (50 commits)
ide: remove inclusion of non-existent io_trace.h
ide-disk: add get_smart_data() helper
ide: fix ->data_phase in taskfile_load_raw()
ide: check drive->using_dma in flagged_taskfile()
ide: check ->dma_setup() return value in flagged_taskfile()
dtc2278: note on docs
qd65xx: remove pointless qd_{read,write}_reg() (take 2)
ide: PCI BMDMA initialization fixes (take 2)
ide: remove stale comments from ide-taskfile.c
ide: remove dead code from ide_driveid_update()
ide: use __ide_end_request() in ide_end_dequeued_request()
ide: enhance ide_setup_pci_noise()
cs5530: remove needless ide_lock taking
ide: take ide_lock for prefetch disable/enable in do_special()
ht6560b: fix deadlock on error handling
cmd640: fix deadlock on error handling
slc90e66: fix deadlock on error handling
opti621: fix deadlock on error handling
qd65xx: fix deadlock on error handling
dtc2278: fix deadlock on error handling
...
Diffstat (limited to 'drivers/ide/ide-taskfile.c')
-rw-r--r-- | drivers/ide/ide-taskfile.c | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index 2a3c8d49834..73ef6bf5fbc 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c @@ -8,23 +8,6 @@ * Copyright (C) 2003-2004 Bartlomiej Zolnierkiewicz * * The big the bad and the ugly. - * - * Problems to be fixed because of BH interface or the lack therefore. - * - * Fill me in stupid !!! - * - * HOST: - * General refers to the Controller and Driver "pair". - * DATA HANDLER: - * Under the context of Linux it generally refers to an interrupt handler. - * However, it correctly describes the 'HOST' - * DATA BLOCK: - * The amount of data needed to be transfered as predefined in the - * setup of the device. - * STORAGE ATOMIC: - * The 'DATA BLOCK' associated to the 'DATA HANDLER', and can be as - * small as a single sector or as large as the entire command block - * request. */ #include <linux/module.h> @@ -695,9 +678,6 @@ int ide_wait_cmd (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, return ide_do_drive_cmd(drive, &rq, ide_wait); } -/* - * FIXME : this needs to map into at taskfile. <andre@linux-ide.org> - */ int ide_cmd_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) { int err = 0; @@ -761,9 +741,6 @@ static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf) return ide_do_drive_cmd(drive, &rq, ide_wait); } -/* - * FIXME : this needs to map into at taskfile. <andre@linux-ide.org> - */ int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg) { void __user *p = (void __user *)arg; @@ -860,9 +837,14 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task) case TASKFILE_OUT_DMA: case TASKFILE_IN_DMAQ: case TASKFILE_IN_DMA: - hwif->dma_setup(drive); - hwif->dma_exec_cmd(drive, taskfile->command); - hwif->dma_start(drive); + if (!drive->using_dma) + break; + + if (!hwif->dma_setup(drive)) { + hwif->dma_exec_cmd(drive, taskfile->command); + hwif->dma_start(drive); + return ide_started; + } break; default: @@ -876,7 +858,8 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task) return task->prehandler(drive, task->rq); } ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL); + return ide_started; } - return ide_started; + return ide_stopped; } |