Re: [PATCH] IDE cleanups for 2.6.4-rc1 (2/3)
From: Bartlomiej Zolnierkiewicz <hidden>
Date: 2004-03-03 04:55:45
Also in:
lkml
On Wednesday 03 of March 2004 00:08, Jeff Garzik wrote:
Bartlomiej Zolnierkiewicz wrote:quoted
[IDE] remove ide_cmd_type_parser() logic Set ide_task_t fields (command_type, handler and prehandler) directly. Remove unused ide_task_t->posthandler and all ide_cmd_type_parser() logic. ide_cmd_type_parser() was meant to be used for ioctls but ended up checking validity of kernel generated requests (doh!). Rationale for removal: - it can't be used for existing ioctls (changes the way they work) - kernel shouldn't check validity of (root only) user-space requests (it can and should be done in user-space) - it wastes CPU cycles on going through parsers - it makes code harder to understand/follow (now info about request is localized)Without the annoyingly-large 'switch', how do you figure out whether a command is non-data, pio-read, pio-write, dma-read, or dma-write?
Using ide_task_t->{command_type, handler}, command_type values:
IDE_DRIVE_TASK_IN - read
IDE_DRIVE_TASK_RAW_WRITE - write
IDE_DRIVE_TASK_NO_DATA - no data
If handler is NULL we know that command is a DMA one.
HDIO_DRIVE_TASKFILE gets information about taskfile from user-space in
ide_task_request_t->{command_type, data_phase}, data_phase can be:
TASKFILE_OUT_DMA{Q}
TASKFILE_IN_DMA{Q}
TASKFILE_MULTI_OUT
TASKFILE_OUT
TASKFILE_MULTI_IN
TASKFILE_IN
TASKFILE_NO_DATA
and this information is translated into ide_task_t->handler.
This is of course non-optimal and driver should be using something like
ata_taskfile->protocol (as in libata).
Please note that any attempts to verify commands (like this 'switch')
will fail for future or vendor specific ones.
Bartlomiej