Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=866e2ec9ce525de0e7c10d02ead8d85af27adffd
Commit:     866e2ec9ce525de0e7c10d02ead8d85af27adffd
Parent:     ac026ff254b32915bb14ba97a23b4019d137f181
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Fri Jan 25 22:17:14 2008 +0100
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 22:17:14 2008 +0100

    ide: remove 'tf_in_flags' field from ide_task_t
    
    * Add IDE_TFLAG_IN_DATA taskfile flag to indicate the need of reading
      IDE_DATA_REG in ide_end_drive_cmd().
    
      Set the new flag in ide_taskfile_ioctl() if ->in_flags.b.data is set.
    
    * Add IDE_TFLAG_FLAGGED_SET_IN_FLAGS taskfile flag to indicate the
      need of modifying ->in_flags in ide_taskfile_ioctl().
    
      Set the new flag in flagged_taskfile() and move the code modifying
      ->tf_in_flags to ide_taskfile_ioctl().
    
      While at it remove the bogus comment: ->tf_in_flags (except .b.data)
      have no effect on selection of registers to read.
    
    * Remove no longer needed 'tf_in_flags' field from ide_task_t.
    
    As the result we finally have the internals of HDIO_DRIVE_TASKFILE ioctl
    separated from the core IDE code.
    
    There should be no functionality changes caused by this patch.
    
    Acked-by: Sergei Shtylyov <[EMAIL PROTECTED]>
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/ide-io.c       |    2 +-
 drivers/ide/ide-taskfile.c |   29 +++++++++++++----------------
 include/linux/ide.h        |    5 +++--
 3 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index f4f7e3d..1112d8b 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -340,7 +340,7 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
                if (args) {
                        struct ide_taskfile *tf = &args->tf;
 
-                       if (args->tf_in_flags.b.data) {
+                       if (args->tf_flags & IDE_TFLAG_IN_DATA) {
                                u16 data = hwif->INW(IDE_DATA_REG);
 
                                tf->data = data & 0xff;
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
index ff28449..03c4a0c 100644
--- a/drivers/ide/ide-taskfile.c
+++ b/drivers/ide/ide-taskfile.c
@@ -599,8 +599,8 @@ int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int 
cmd, unsigned long arg)
 
        memcpy(&args.tf_array[0], req_task->hob_ports, HDIO_DRIVE_HOB_HDR_SIZE 
- 2);
        memcpy(&args.tf_array[6], req_task->io_ports, HDIO_DRIVE_TASK_HDR_SIZE);
-       args.tf_in_flags  = req_task->in_flags;
-       args.data_phase   = req_task->data_phase;
+
+       args.data_phase = req_task->data_phase;
 
        args.tf_flags = IDE_TFLAG_OUT_DEVICE;
        if (drive->addressing == 1)
@@ -637,6 +637,9 @@ int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int 
cmd, unsigned long arg)
                        args.tf_flags |= IDE_TFLAG_OUT_HOB;
        }
 
+       if (req_task->in_flags.b.data)
+               args.tf_flags |= IDE_TFLAG_IN_DATA;
+
        drive->io_32bit = 0;
        switch(req_task->data_phase) {
                case TASKFILE_MULTI_OUT:
@@ -704,7 +707,13 @@ int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int 
cmd, unsigned long arg)
 
        memcpy(req_task->hob_ports, &args.tf_array[0], HDIO_DRIVE_HOB_HDR_SIZE 
- 2);
        memcpy(req_task->io_ports, &args.tf_array[6], HDIO_DRIVE_TASK_HDR_SIZE);
-       req_task->in_flags  = args.tf_in_flags;
+
+       if ((args.tf_flags & IDE_TFLAG_FLAGGED_SET_IN_FLAGS) &&
+           req_task->in_flags.all == 0) {
+               req_task->in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;
+               if (drive->addressing == 1)
+                       req_task->in_flags.all |= (IDE_HOB_STD_IN_FLAGS << 8);
+       }
 
        if (copy_to_user(buf, req_task, tasksize)) {
                err = -EFAULT;
@@ -846,19 +855,7 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, 
ide_task_t *task)
                }
        }
 
-       /*
-        * (ks) Check taskfile in flags.
-        * If set, then execute as it is defined.
-        * If not set, then define default settings.
-        * The default values are:
-        *      read all taskfile registers (except data)
-        *      read the hob registers (sector, nsector, lcyl, hcyl)
-        */
-       if (task->tf_in_flags.all == 0) {
-               task->tf_in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;
-               if (drive->addressing == 1)
-                       task->tf_in_flags.all |= (IDE_HOB_STD_IN_FLAGS  << 8);
-        }
+       task->tf_flags |= IDE_TFLAG_FLAGGED_SET_IN_FLAGS;
 
        return do_rw_taskfile(drive, task);
 }
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 7485fc7..c23ef2d 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -910,6 +910,8 @@ enum {
                                          IDE_TFLAG_OUT_LBAH,
        IDE_TFLAG_OUT_DEVICE            = (1 << 14),
        IDE_TFLAG_WRITE                 = (1 << 15),
+       IDE_TFLAG_FLAGGED_SET_IN_FLAGS  = (1 << 16),
+       IDE_TFLAG_IN_DATA               = (1 << 17),
 };
 
 struct ide_taskfile {
@@ -946,8 +948,7 @@ typedef struct ide_task_s {
                struct ide_taskfile     tf;
                u8                      tf_array[14];
        };
-       u16                     tf_flags;
-       ide_reg_valid_t         tf_in_flags;
+       u32                     tf_flags;
        int                     data_phase;
        ide_pre_handler_t       *prehandler;
        ide_handler_t           *handler;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to