]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/dc395x.c
[SCSI] lpfc 8.1.1 : Add support for more members of the Light Pulse 11xxx (4Gb) family
[linux-2.6-omap-h63xx.git] / drivers / scsi / dc395x.c
index 600ba120286468e63f0df8240e08613dee24fdf5..c8a32cf47d738fba4e991d1c2f37e09c6a5b08c2 100644 (file)
@@ -976,6 +976,16 @@ static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
        }
 }
 
+static inline void pio_trigger(void)
+{
+       static int feedback_requested;
+
+       if (!feedback_requested) {
+               feedback_requested = 1;
+               printk(KERN_WARNING "%s: Please, contact <linux-scsi@vger.kernel.org> "
+                      "to help improve support for your system.\n", __FILE__);
+       }
+}
 
 /* Prepare SRB for being sent to Device DCB w/ command *cmd */
 static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb,
@@ -2320,6 +2330,7 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
                                              CFG2_WIDEFIFO);
                        while (DC395x_read8(acb, TRM_S1040_SCSI_FIFOCNT) != 0x40) {
                                u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
+                               pio_trigger();
                                *(srb->virt_addr)++ = byte;
                                if (debug_enabled(DBG_PIO))
                                        printk(" %02x", byte);
@@ -2331,6 +2342,7 @@ static void data_in_phase0(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb,
                 /* Read the last byte ... */
                                if (srb->total_xfer_length > 0) {
                                        u8 byte = DC395x_read8(acb, TRM_S1040_SCSI_FIFO);
+                                       pio_trigger();
                                        *(srb->virt_addr)++ = byte;
                                        srb->total_xfer_length--;
                                        if (debug_enabled(DBG_PIO))
@@ -2507,6 +2519,7 @@ static void data_io_transfer(struct AdapterCtlBlk *acb,
                                if (debug_enabled(DBG_PIO))
                                        printk(" %02x", (unsigned char) *(srb->virt_addr));
 
+                               pio_trigger();
                                DC395x_write8(acb, TRM_S1040_SCSI_FIFO, 
                                     *(srb->virt_addr)++);
 
@@ -4257,8 +4270,7 @@ static void adapter_sg_tables_free(struct AdapterCtlBlk *acb)
        const unsigned srbs_per_page = PAGE_SIZE/SEGMENTX_LEN;
 
        for (i = 0; i < DC395x_MAX_SRB_CNT; i += srbs_per_page)
-               if (acb->srb_array[i].segment_x)
-                       kfree(acb->srb_array[i].segment_x);
+               kfree(acb->srb_array[i].segment_x);
 }