lkml.org 
[lkml]   [2004]   [Aug]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/4][diskdump] x86-64 support
    This is a patch for aic7xxx/aic79xx driver.


    diff -Nur linux-2.6.8.1.org/drivers/scsi/aic7xxx/aic79xx_osm.c linux-2.6.8.1/drivers/scsi/aic7xxx/aic79xx_osm.c
    --- linux-2.6.8.1.org/drivers/scsi/aic7xxx/aic79xx_osm.c 2004-08-25 15:55:50.458167279 +0900
    +++ linux-2.6.8.1/drivers/scsi/aic7xxx/aic79xx_osm.c 2004-08-25 18:56:51.525417043 +0900
    @@ -786,6 +786,8 @@
    static int ahd_linux_bus_reset(Scsi_Cmnd *);
    static int ahd_linux_dev_reset(Scsi_Cmnd *);
    static int ahd_linux_abort(Scsi_Cmnd *);
    +static int ahd_linux_sanity_check(struct scsi_device *);
    +static void ahd_linux_poll(struct scsi_device *);

    /*
    * Calculate a safe value for AHD_NSEG (as expressed through ahd_linux_nseg).
    @@ -1684,6 +1686,8 @@
    .slave_alloc = ahd_linux_slave_alloc,
    .slave_configure = ahd_linux_slave_configure,
    .slave_destroy = ahd_linux_slave_destroy,
    + .dump_sanity_check = ahd_linux_sanity_check,
    + .dump_poll = ahd_linux_poll,
    };

    /**************************** Tasklet Handler *********************************/
    @@ -4191,6 +4195,39 @@
    return IRQ_RETVAL(ours);
    }

    +static int
    +ahd_linux_sanity_check(struct scsi_device *device)
    +{
    + struct ahd_softc *ahd;
    + struct ahd_linux_device *dev;
    +
    + ahd = *(struct ahd_softc **)device->host->hostdata;
    + dev = ahd_linux_get_device(ahd, device->channel,
    + device->id, device->lun,
    + /*alloc*/FALSE);
    +
    + if (dev == NULL)
    + return -ENXIO;
    + if (ahd->platform_data->qfrozen || dev->qfrozen)
    + return -EBUSY;
    + if (spin_is_locked(&ahd->platform_data->spin_lock))
    + return -EBUSY;
    + return 0;
    +}
    +
    +static void
    +ahd_linux_poll(struct scsi_device *device)
    +{
    + struct ahd_softc *ahd;
    + int ours;
    +
    + ahd = *(struct ahd_softc **)device->host->hostdata;
    + ours = ahd_intr(ahd);
    + if (ahd_linux_next_device_to_run(ahd) != NULL)
    + ahd_schedule_runq(ahd);
    + ahd_linux_run_complete_queue(ahd);
    +}
    +
    void
    ahd_platform_flushwork(struct ahd_softc *ahd)
    {
    diff -Nur linux-2.6.8.1.org/drivers/scsi/aic7xxx/aic7xxx_osm.c linux-2.6.8.1/drivers/scsi/aic7xxx/aic7xxx_osm.c
    --- linux-2.6.8.1.org/drivers/scsi/aic7xxx/aic7xxx_osm.c 2004-08-25 15:55:50.463050091 +0900
    +++ linux-2.6.8.1/drivers/scsi/aic7xxx/aic7xxx_osm.c 2004-08-25 18:56:51.528346731 +0900
    @@ -774,6 +774,8 @@
    static int ahc_linux_bus_reset(Scsi_Cmnd *);
    static int ahc_linux_dev_reset(Scsi_Cmnd *);
    static int ahc_linux_abort(Scsi_Cmnd *);
    +static int ahc_linux_sanity_check(struct scsi_device *);
    +static void ahc_linux_poll(struct scsi_device *);

    /*
    * Calculate a safe value for AHC_NSEG (as expressed through ahc_linux_nseg).
    @@ -1310,6 +1312,8 @@
    .slave_alloc = ahc_linux_slave_alloc,
    .slave_configure = ahc_linux_slave_configure,
    .slave_destroy = ahc_linux_slave_destroy,
    + .dump_sanity_check = ahc_linux_sanity_check,
    + .dump_poll = ahc_linux_poll,
    };

    /**************************** Tasklet Handler *********************************/
    @@ -3863,6 +3867,41 @@
    return IRQ_RETVAL(ours);
    }

    +static int
    +ahc_linux_sanity_check(struct scsi_device *device)
    +{
    + struct ahc_softc *ahc;
    + struct ahc_linux_device *dev;
    +
    + ahc = *(struct ahc_softc **)device->host->hostdata;
    + dev = ahc_linux_get_device(ahc, device->channel,
    + device->id, device->lun,
    + /*alloc*/FALSE);
    + if (dev == NULL)
    + return -ENXIO;
    + if (ahc->platform_data->qfrozen || dev->qfrozen)
    + return -EBUSY;
    + if (spin_is_locked(&ahc->platform_data->spin_lock))
    + return -EBUSY;
    + return 0;
    +}
    +
    +static void
    +ahc_linux_poll(struct scsi_device *device)
    +{
    + struct ahc_softc *ahc;
    + struct ahc_linux_device *dev;
    +
    + ahc = *(struct ahc_softc **)device->host->hostdata;
    + ahc_intr(ahc);
    + while ((dev = ahc_linux_next_device_to_run(ahc)) != NULL) {
    + TAILQ_REMOVE(&ahc->platform_data->device_runq, dev, links);
    + dev->flags &= ~AHC_DEV_ON_RUN_LIST;
    + ahc_linux_check_device_queue(ahc, dev);
    + }
    + ahc_linux_run_complete_queue(ahc);
    +}
    +
    void
    ahc_platform_flushwork(struct ahc_softc *ahc)
    {
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 14:05    [W:0.030 / U:3.344 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site