[SCSI] use sfoo_printk() in drivers
[safe/jmp/linux-2.6] / drivers / scsi / 3w-xxxx.c
index b6dc576..283f6d2 100644 (file)
@@ -1432,7 +1432,9 @@ static int tw_scsi_eh_reset(struct scsi_cmnd *SCpnt)
 
        tw_dev->num_resets++;
 
-       printk(KERN_WARNING "3w-xxxx: scsi%d: WARNING: Unit #%d: Command (0x%x) timed out, resetting card.\n", tw_dev->host->host_no, SCpnt->device->id, SCpnt->cmnd[0]);
+       sdev_printk(KERN_WARNING, SCpnt->device,
+               "WARNING: Command (0x%x) timed out, resetting card.\n",
+               SCpnt->cmnd[0]);
 
        /* Now reset the card and some of the device extension data */
        if (tw_reset_device_extension(tw_dev, 0)) {
@@ -1499,22 +1501,43 @@ static int tw_scsiop_inquiry(TW_Device_Extension *tw_dev, int request_id)
        return 0;
 } /* End tw_scsiop_inquiry() */
 
+static void tw_transfer_internal(TW_Device_Extension *tw_dev, int request_id,
+                                void *data, unsigned int len)
+{
+       struct scsi_cmnd *cmd = tw_dev->srb[request_id];
+       void *buf;
+       unsigned int transfer_len;
+
+       if (cmd->use_sg) {
+               struct scatterlist *sg =
+                       (struct scatterlist *)cmd->request_buffer;
+               buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
+               transfer_len = min(sg->length, len);
+       } else {
+               buf = cmd->request_buffer;
+               transfer_len = min(cmd->request_bufflen, len);
+       }
+
+       memcpy(buf, data, transfer_len);
+       
+       if (cmd->use_sg) {
+               struct scatterlist *sg;
+
+               sg = (struct scatterlist *)cmd->request_buffer;
+               kunmap_atomic(buf - sg->offset, KM_IRQ0);
+       }
+}
+
 /* This function is called by the isr to complete an inquiry command */
 static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_id)
 {
        unsigned char *is_unit_present;
-       unsigned char *request_buffer;
+       unsigned char request_buffer[36];
        TW_Param *param;
 
        dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_inquiry_complete()\n");
 
-       /* Fill request buffer */
-       if (tw_dev->srb[request_id]->request_buffer == NULL) {
-               printk(KERN_WARNING "3w-xxxx: tw_scsiop_inquiry_complete(): Request buffer NULL.\n");
-               return 1;
-       }
-       request_buffer = tw_dev->srb[request_id]->request_buffer;
-       memset(request_buffer, 0, tw_dev->srb[request_id]->request_bufflen);
+       memset(request_buffer, 0, sizeof(request_buffer));
        request_buffer[0] = TYPE_DISK; /* Peripheral device type */
        request_buffer[1] = 0;         /* Device type modifier */
        request_buffer[2] = 0;         /* No ansi/iso compliance */
@@ -1522,6 +1545,8 @@ static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_i
        memcpy(&request_buffer[8], "3ware   ", 8);       /* Vendor ID */
        sprintf(&request_buffer[16], "Logical Disk %-2d ", tw_dev->srb[request_id]->device->id);
        memcpy(&request_buffer[32], TW_DRIVER_VERSION, 3);
+       tw_transfer_internal(tw_dev, request_id, request_buffer,
+                            sizeof(request_buffer));
 
        param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
        if (param == NULL) {
@@ -1612,7 +1637,7 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
 {
        TW_Param *param;
        unsigned char *flags;
-       unsigned char *request_buffer;
+       unsigned char request_buffer[8];
 
        dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_mode_sense_complete()\n");
 
@@ -1622,8 +1647,7 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
                return 1;
        }
        flags = (char *)&(param->data[0]);
-       request_buffer = tw_dev->srb[request_id]->buffer;
-       memset(request_buffer, 0, tw_dev->srb[request_id]->request_bufflen);
+       memset(request_buffer, 0, sizeof(request_buffer));
 
        request_buffer[0] = 0xf;        /* mode data length */
        request_buffer[1] = 0;          /* default medium type */
@@ -1635,6 +1659,8 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
                request_buffer[6] = 0x4;        /* WCE on */
        else
                request_buffer[6] = 0x0;        /* WCE off */
+       tw_transfer_internal(tw_dev, request_id, request_buffer,
+                            sizeof(request_buffer));
 
        return 0;
 } /* End tw_scsiop_mode_sense_complete() */
@@ -1701,17 +1727,12 @@ static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int req
 {
        unsigned char *param_data;
        u32 capacity;
-       char *buff;
+       char buff[8];
        TW_Param *param;
 
        dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_read_capacity_complete()\n");
 
-       buff = tw_dev->srb[request_id]->request_buffer;
-       if (buff == NULL) {
-               printk(KERN_WARNING "3w-xxxx: tw_scsiop_read_capacity_complete(): Request buffer NULL.\n");
-               return 1;
-       }
-       memset(buff, 0, tw_dev->srb[request_id]->request_bufflen);
+       memset(buff, 0, sizeof(buff));
        param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
        if (param == NULL) {
                printk(KERN_WARNING "3w-xxxx: tw_scsiop_read_capacity_complete(): Bad alignment virtual address.\n");
@@ -1739,6 +1760,8 @@ static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int req
        buff[6] = (TW_BLOCK_SIZE >> 8) & 0xff;
        buff[7] = TW_BLOCK_SIZE & 0xff;
 
+       tw_transfer_internal(tw_dev, request_id, buff, sizeof(buff));
+
        return 0;
 } /* End tw_scsiop_read_capacity_complete() */
 
@@ -2264,9 +2287,9 @@ static void __tw_shutdown(TW_Device_Extension *tw_dev)
 } /* End __tw_shutdown() */
 
 /* Wrapper for __tw_shutdown */
-static void tw_shutdown(struct device *dev)
+static void tw_shutdown(struct pci_dev *pdev)
 {
-       struct Scsi_Host *host = pci_get_drvdata(to_pci_dev(dev));
+       struct Scsi_Host *host = pci_get_drvdata(pdev);
        TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata;
 
        __tw_shutdown(tw_dev);
@@ -2451,9 +2474,7 @@ static struct pci_driver tw_driver = {
        .id_table       = tw_pci_tbl,
        .probe          = tw_probe,
        .remove         = tw_remove,
-       .driver         = {
-               .shutdown = tw_shutdown
-       }
+       .shutdown       = tw_shutdown,
 };
 
 /* This function is called on driver initialization */