]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/scsi/sg.c
[PATCH] ARM: 2687/1: i.MX framebuffer: make dmacr register platform configurable
[mv-sheeva.git] / drivers / scsi / sg.c
index 32de9aabcb99d38fba1a1af913f3df128524f9a4..51292f269ce52c0fb034d6e77485b532adcb217b 100644 (file)
@@ -51,6 +51,7 @@ static int sg_version_num = 30533;    /* 2 digits for each component */
 #include <linux/delay.h>
 
 #include "scsi.h"
+#include <scsi/scsi_dbg.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_driver.h>
 #include <scsi/scsi_ioctl.h>
@@ -746,16 +747,16 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
        switch (hp->dxfer_direction) {
        case SG_DXFER_TO_FROM_DEV:
        case SG_DXFER_FROM_DEV:
-               SRpnt->sr_data_direction = SCSI_DATA_READ;
+               SRpnt->sr_data_direction = DMA_FROM_DEVICE;
                break;
        case SG_DXFER_TO_DEV:
-               SRpnt->sr_data_direction = SCSI_DATA_WRITE;
+               SRpnt->sr_data_direction = DMA_TO_DEVICE;
                break;
        case SG_DXFER_UNKNOWN:
-               SRpnt->sr_data_direction = SCSI_DATA_UNKNOWN;
+               SRpnt->sr_data_direction = DMA_BIDIRECTIONAL;
                break;
        default:
-               SRpnt->sr_data_direction = SCSI_DATA_NONE;
+               SRpnt->sr_data_direction = DMA_NONE;
                break;
        }
        SRpnt->upper_private_data = srp;
@@ -1368,7 +1369,7 @@ sg_cmd_done(Scsi_Cmnd * SCpnt)
                if ((sdp->sgdebug > 0) &&
                    ((CHECK_CONDITION == srp->header.masked_status) ||
                     (COMMAND_TERMINATED == srp->header.masked_status)))
-                       print_req_sense("sg_cmd_done", SRpnt);
+                       scsi_print_req_sense("sg_cmd_done", SRpnt);
 
                /* Following if statement is a patch supplied by Eric Youngdale */
                if (driver_byte(SRpnt->sr_result) != 0
@@ -1429,7 +1430,7 @@ static struct file_operations sg_fops = {
        .fasync = sg_fasync,
 };
 
-static struct class_simple * sg_sysfs_class;
+static struct class *sg_sysfs_class;
 
 static int sg_sysfs_valid = 0;
 
@@ -1550,13 +1551,13 @@ sg_add(struct class_device *cl_dev)
        if (sg_sysfs_valid) {
                struct class_device * sg_class_member;
 
-               sg_class_member = class_simple_device_add(sg_sysfs_class, 
+               sg_class_member = class_device_create(sg_sysfs_class,
                                MKDEV(SCSI_GENERIC_MAJOR, k), 
                                cl_dev->dev, "%s", 
                                disk->disk_name);
                if (IS_ERR(sg_class_member))
                        printk(KERN_WARNING "sg_add: "
-                               "class_simple_device_add failed\n");
+                               "class_device_create failed\n");
                class_set_devdata(sg_class_member, sdp);
                error = sysfs_create_link(&scsidp->sdev_gendev.kobj, 
                                          &sg_class_member->kobj, "generic");
@@ -1635,7 +1636,7 @@ sg_remove(struct class_device *cl_dev)
 
        if (sdp) {
                sysfs_remove_link(&scsidp->sdev_gendev.kobj, "generic");
-               class_simple_device_remove(MKDEV(SCSI_GENERIC_MAJOR, k));
+               class_device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, k));
                cdev_del(sdp->cdev);
                sdp->cdev = NULL;
                devfs_remove("%s/generic", scsidp->devfs_name);
@@ -1676,7 +1677,7 @@ init_sg(void)
                                    SG_MAX_DEVS, "sg");
        if (rc)
                return rc;
-        sg_sysfs_class = class_simple_create(THIS_MODULE, "scsi_generic");
+        sg_sysfs_class = class_create(THIS_MODULE, "scsi_generic");
         if ( IS_ERR(sg_sysfs_class) ) {
                rc = PTR_ERR(sg_sysfs_class);
                goto err_out;
@@ -1689,7 +1690,7 @@ init_sg(void)
 #endif                         /* CONFIG_SCSI_PROC_FS */
                return 0;
        }
-       class_simple_destroy(sg_sysfs_class);
+       class_destroy(sg_sysfs_class);
 err_out:
        unregister_chrdev_region(MKDEV(SCSI_GENERIC_MAJOR, 0), SG_MAX_DEVS);
        return rc;
@@ -1702,7 +1703,7 @@ exit_sg(void)
        sg_proc_cleanup();
 #endif                         /* CONFIG_SCSI_PROC_FS */
        scsi_unregister_interface(&sg_interface);
-       class_simple_destroy(sg_sysfs_class);
+       class_destroy(sg_sysfs_class);
        sg_sysfs_valid = 0;
        unregister_chrdev_region(MKDEV(SCSI_GENERIC_MAJOR, 0),
                                 SG_MAX_DEVS);
@@ -2471,6 +2472,8 @@ sg_remove_request(Sg_fd * sfp, Sg_request * srp)
        if ((!sfp) || (!srp) || (!sfp->headrp))
                return res;
        write_lock_irqsave(&sfp->rq_list_lock, iflags);
+       if (srp->my_cmdp)
+               srp->my_cmdp->upper_private_data = NULL;
        prev_rp = sfp->headrp;
        if (srp == prev_rp) {
                sfp->headrp = prev_rp->nextrp;