lkml.org 
[lkml]   [2008]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 07/22] ide: add ide_queue_pc_head() helper
    * Move REQ_IDETAPE_* enums to <linux/ide.h>.

    * Add ide_queue_pc_head() and convert ide-{floppy,tape}.c to use it
    instead of ide*_queue_pc_head().

    * Remove no longer used ide*_queue_pc_head().

    There should be no functional changes caused by this patch.

    Cc: Borislav Petkov <petkovbb@gmail.com>
    Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    ---
    drivers/ide/ide-atapi.c | 20 ++++++++++++++++++++
    drivers/ide/ide-floppy.c | 21 +--------------------
    drivers/ide/ide-tape.c | 36 +-----------------------------------
    include/linux/ide.h | 16 ++++++++++++++++
    4 files changed, 38 insertions(+), 55 deletions(-)

    Index: b/drivers/ide/ide-atapi.c
    ===================================================================
    --- a/drivers/ide/ide-atapi.c
    +++ b/drivers/ide/ide-atapi.c
    @@ -119,6 +119,26 @@ void ide_init_pc(struct ide_atapi_pc *pc
    }
    EXPORT_SYMBOL_GPL(ide_init_pc);

    +/*
    + * Generate a new packet command request in front of the request queue, before
    + * the current request, so that it will be processed immediately, on the next
    + * pass through the driver.
    + */
    +void ide_queue_pc_head(ide_drive_t *drive, struct gendisk *disk,
    + struct ide_atapi_pc *pc, struct request *rq)
    +{
    + blk_rq_init(NULL, rq);
    + rq->cmd_type = REQ_TYPE_SPECIAL;
    + rq->cmd_flags |= REQ_PREEMPT;
    + rq->buffer = (char *)pc;
    + rq->rq_disk = disk;
    + memcpy(rq->cmd, pc->c, 12);
    + if (drive->media == ide_tape)
    + rq->cmd[13] = REQ_IDETAPE_PC1;
    + ide_do_drive_cmd(drive, rq);
    +}
    +EXPORT_SYMBOL_GPL(ide_queue_pc_head);
    +
    /* TODO: unify the code thus making some arguments go away */
    ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
    ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
    Index: b/drivers/ide/ide-floppy.c
    ===================================================================
    --- a/drivers/ide/ide-floppy.c
    +++ b/drivers/ide/ide-floppy.c
    @@ -211,25 +211,6 @@ static void idefloppy_update_buffers(ide
    idefloppy_end_request(drive, 1, 0);
    }

    -/*
    - * Generate a new packet command request in front of the request queue, before
    - * the current request so that it will be processed immediately, on the next
    - * pass through the driver.
    - */
    -static void idefloppy_queue_pc_head(ide_drive_t *drive, struct ide_atapi_pc *pc,
    - struct request *rq)
    -{
    - struct ide_floppy_obj *floppy = drive->driver_data;
    -
    - blk_rq_init(NULL, rq);
    - rq->buffer = (char *) pc;
    - rq->cmd_type = REQ_TYPE_SPECIAL;
    - rq->cmd_flags |= REQ_PREEMPT;
    - rq->rq_disk = floppy->disk;
    - memcpy(rq->cmd, pc->c, 12);
    - ide_do_drive_cmd(drive, rq);
    -}
    -
    static void ide_floppy_callback(ide_drive_t *drive)
    {
    idefloppy_floppy_t *floppy = drive->driver_data;
    @@ -287,7 +268,7 @@ static void idefloppy_retry_pc(ide_drive

    (void)ide_read_error(drive);
    idefloppy_create_request_sense_cmd(pc);
    - idefloppy_queue_pc_head(drive, pc, rq);
    + ide_queue_pc_head(drive, floppy->disk, pc, rq);
    }

    /* The usual interrupt handler called during a packet command. */
    Index: b/drivers/ide/ide-tape.c
    ===================================================================
    --- a/drivers/ide/ide-tape.c
    +++ b/drivers/ide/ide-tape.c
    @@ -159,20 +159,6 @@ struct idetape_bh {
    #define IDETAPE_LU_RETENSION_MASK 2
    #define IDETAPE_LU_EOT_MASK 4

    -/*
    - * Special requests for our block device strategy routine.
    - *
    - * In order to service a character device command, we add special requests to
    - * the tail of our block device request queue and wait for their completion.
    - */
    -
    -enum {
    - REQ_IDETAPE_PC1 = (1 << 0), /* packet command (first stage) */
    - REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */
    - REQ_IDETAPE_READ = (1 << 2),
    - REQ_IDETAPE_WRITE = (1 << 3),
    -};
    -
    /* Error codes returned in rq->errors to the higher part of the driver. */
    #define IDETAPE_ERROR_GENERAL 101
    #define IDETAPE_ERROR_FILEMARK 102
    @@ -613,26 +599,6 @@ static void idetape_create_request_sense
    }

    /*
    - * Generate a new packet command request in front of the request queue, before
    - * the current request, so that it will be processed immediately, on the next
    - * pass through the driver.
    - */
    -static void idetape_queue_pc_head(ide_drive_t *drive, struct ide_atapi_pc *pc,
    - struct request *rq)
    -{
    - struct ide_tape_obj *tape = drive->driver_data;
    -
    - blk_rq_init(NULL, rq);
    - rq->cmd_type = REQ_TYPE_SPECIAL;
    - rq->cmd_flags |= REQ_PREEMPT;
    - rq->buffer = (char *) pc;
    - rq->rq_disk = tape->disk;
    - memcpy(rq->cmd, pc->c, 12);
    - rq->cmd[13] = REQ_IDETAPE_PC1;
    - ide_do_drive_cmd(drive, rq);
    -}
    -
    -/*
    * idetape_retry_pc is called when an error was detected during the
    * last packet command. We queue a request sense packet command in
    * the head of the request list.
    @@ -646,7 +612,7 @@ static void idetape_retry_pc(ide_drive_t
    (void)ide_read_error(drive);
    idetape_create_request_sense_cmd(pc);
    set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags);
    - idetape_queue_pc_head(drive, pc, rq);
    + ide_queue_pc_head(drive, tape->disk, pc, rq);
    }

    /*
    Index: b/include/linux/ide.h
    ===================================================================
    --- a/include/linux/ide.h
    +++ b/include/linux/ide.h
    @@ -1119,6 +1119,22 @@ int ide_check_atapi_device(ide_drive_t *

    void ide_init_pc(struct ide_atapi_pc *);

    +/*
    + * Special requests for ide-tape block device strategy routine.
    + *
    + * In order to service a character device command, we add special requests to
    + * the tail of our block device request queue and wait for their completion.
    + */
    +enum {
    + REQ_IDETAPE_PC1 = (1 << 0), /* packet command (first stage) */
    + REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */
    + REQ_IDETAPE_READ = (1 << 2),
    + REQ_IDETAPE_WRITE = (1 << 3),
    +};
    +
    +void ide_queue_pc_head(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *,
    + struct request *);
    +
    ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
    ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
    void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *),

    \
     
     \ /
      Last update: 2008-08-10 17:43    [W:0.029 / U:178.868 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site