public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH2.5] ips 2/4: 2.4 resync
@ 2003-08-15 12:43 David Jeffery
  2003-08-15 20:56 ` Jeff Garzik
  0 siblings, 1 reply; 2+ messages in thread
From: David Jeffery @ 2003-08-15 12:43 UTC (permalink / raw)
  To: linux-scsi@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 323 bytes --]

This patch is a resync with the 6.10 driver for 2.4 and updates the 2.4
compatability code.  It adds a new wrapper function for differences
between the 2.4 and 2.6 scsi proc interface,  forces pci posting in 3
places, corrects using a meaningless constant of 0x80 to 0, and syncs
comments that had changed. 

David Jeffery

[-- Attachment #2: test3.patch2 --]
[-- Type: text/x-patch, Size: 7994 bytes --]

diff -urN linux-2.6.0-test3_p1/drivers/scsi/ips.c linux-2.6.0-test3_p2/drivers/scsi/ips.c
--- linux-2.6.0-test3_p1/drivers/scsi/ips.c	2003-08-11 12:32:04.000000000 -0400
+++ linux-2.6.0-test3_p2/drivers/scsi/ips.c	2003-08-11 13:53:24.000000000 -0400
@@ -130,6 +130,7 @@
 /* 5.10.15  - remove unused code (sem, macros, etc.)                         */
 /* 5.30.00  - use __devexit_p()                                              */
 /* 6.00.00  - Add 6x Adapters and Battery Flash                              */
+/* 6.10.00  - Remove 1G Addressing Limitations                               */
 /*****************************************************************************/
 
 /*
@@ -202,6 +203,7 @@
 #endif
 
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,0)
+#include <linux/blk.h>
 #include "sd.h"
 #define IPS_SG_ADDRESS(sg)       ((sg)->address)
 #define IPS_LOCK_SAVE(lock,flags) spin_lock_irqsave(&io_request_lock,flags)
@@ -257,9 +259,12 @@
 	.queuecommand = ips_queue,
 	.eh_abort_handler = ips_eh_abort,
 	.eh_host_reset_handler = ips_eh_reset,
+	.proc_name = "ips",
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
+	.proc_info = ips_proc_info,
 	.slave_configure = ips_slave_configure,
 #else
+	.proc_info = ips_proc24_info,
 	.select_queue_depths = ips_select_queue_depth,
 #endif
 	.bios_param = ips_biosparam,
@@ -321,8 +326,8 @@
 	"ServeRAID 4Lx",
 	"ServeRAID 5i",
 	"ServeRAID 5i",
-	"ServeRAID 00",
-	"ServeRAID 00"
+	"ServeRAID 6M",
+	"ServeRAID 6i"
 };
 
 static struct notifier_block ips_notifier = {
@@ -595,9 +600,6 @@
 		}
 	}
 
-	SHT->proc_info = ips_proc_info;
-	SHT->proc_name = "ips";
-
 	for (i = 0; i < ips_num_controllers; i++) {
 		if (ips_register_scsi(i))
 			ips_free(ips_ha[i]);
@@ -1122,7 +1124,7 @@
 
 		ips_copp_wait_item_t *scratch;
 
-		/* A Reset IOCTL is only sent by the ServeRAID boot CD in extreme cases. */
+		/* A Reset IOCTL is only sent by the boot CD in extreme cases.           */
 		/* There can never be any system activity ( network or disk ), but check */
 		/* anyway just as a good practice.                                       */
 		pt = (ips_passthru_t *) SC->request_buffer;
@@ -1222,6 +1224,24 @@
 }
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+
+/* ips_proc24_info is a wrapper around ips_proc_info *
+ * for compatibility with the 2.4 scsi parameters    */
+static int
+ips_proc24_info(char *buffer, char **start, off_t offset, int length,
+		              int hostno, int func)
+{
+	int i;
+
+	for (i = 0; i < ips_next_controller; i++) {
+		if (ips_sh[i] && ips_sh[i]->host_no == hostno) {
+			return ips_proc_info(ips_sh[i], buffer, start,
+					     offset, length, func);
+		}
+	}
+	return -EINVAL;	
+}
+
 /****************************************************************************/
 /*                                                                          */
 /* Routine Name: ips_select_queue_depth                                     */
@@ -3501,7 +3521,7 @@
 /*                                                                          */
 /* Routine Description:                                                     */
 /*                                                                          */
-/*   Map ServeRAID error codes to Linux Error Codes                         */
+/*   Map Controller Error codes to Linux Error Codes                        */
 /*                                                                          */
 /****************************************************************************/
 static int
@@ -3755,8 +3775,8 @@
 		/* internal command */
 
 		if (scb->bus > 0) {
-			/* ServeRAID commands can't be issued */
-			/* to real devices -- fail them       */
+			/* Controller commands can't be issued */
+			/* to real devices -- fail them        */
 			if ((ha->waitflag == TRUE) &&
 			    (ha->cmd_in_progress == scb->cdb[0])) {
 				ha->waitflag = FALSE;
@@ -4867,6 +4887,7 @@
 	METHOD_TRACE("ips_enable_int_copperhead", 1);
 
 	outb(ha->io_addr + IPS_REG_HISR, IPS_BIT_EI);
+	inb(ha->io_addr + IPS_REG_HISR);	/*Ensure PCI Posting Completes*/
 }
 
 /****************************************************************************/
@@ -4883,6 +4904,7 @@
 	METHOD_TRACE("ips_enable_int_copperhead_memio", 1);
 
 	writeb(IPS_BIT_EI, ha->mem_ptr + IPS_REG_HISR);
+	readb(ha->mem_ptr + IPS_REG_HISR);	/*Ensure PCI Posting Completes*/
 }
 
 /****************************************************************************/
@@ -4903,6 +4925,7 @@
 	Oimr = readl(ha->mem_ptr + IPS_REG_I960_OIMR);
 	Oimr &= ~0x08;
 	writel(Oimr, ha->mem_ptr + IPS_REG_I960_OIMR);
+	readl(ha->mem_ptr + IPS_REG_I960_OIMR);	/*Ensure PCI Posting Completes*/
 }
 
 /****************************************************************************/
@@ -6192,7 +6215,7 @@
 	scb->cmd.ffdc.op_code = IPS_CMD_FFDC;
 	scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb);
 	scb->cmd.ffdc.reset_count = 0;
-	scb->cmd.ffdc.reset_type = 0x80;
+	scb->cmd.ffdc.reset_type = 0;
 
 	/* convert time to what the card wants */
 	ips_fix_ffdc_time(ha, scb, ha->last_ffdc);
@@ -6781,7 +6804,7 @@
 /*     Assumes that ips_read_adapter_status() is called first filling in     */
 /*     the data for SubSystem Parameters.                                    */
 /*     Called from ips_write_driver_status() so it also assumes NVRAM Page 5 */
-/*     Data is availaible.                                                   */
+/*     Data is available.                                                    */
 /*                                                                           */
 /*---------------------------------------------------------------------------*/
 static void
@@ -6866,7 +6889,7 @@
 /*   Routine Name: ips_get_version_info                                      */
 /*                                                                           */
 /*   Routine Description:                                                    */
-/*     Issue an internal GETVERSION ServeRAID Command                        */
+/*     Issue an internal GETVERSION Command                                  */
 /*                                                                           */
 /*   Return Value:                                                           */
 /*     0 if Successful, else non-zero                                        */
diff -urN linux-2.6.0-test3_p1/drivers/scsi/ips.h linux-2.6.0-test3_p2/drivers/scsi/ips.h
--- linux-2.6.0-test3_p1/drivers/scsi/ips.h	2003-08-11 11:20:56.000000000 -0400
+++ linux-2.6.0-test3_p2/drivers/scsi/ips.h	2003-08-11 12:43:05.000000000 -0400
@@ -106,8 +106,10 @@
       #define IPS_REMOVE_HOST(shost)
       #define IPS_SCSI_SET_DEVICE(sh,ha)   scsi_set_pci_device(sh, (ha)->pcidev)
       #define IPS_PRINTK(level, pcidev, format, arg...)                 \
-            printk(level "%s %s:" format , (pcidev)->driver->name ,     \
-            pci_name(pcidev) , ## arg)
+            printk(level "%s %s:" format , "ips" ,     \
+            (pcidev)->slot_name , ## arg)
+      #define scsi_host_alloc(sh,size)         scsi_register(sh,size)
+      #define scsi_host_put(sh)             scsi_unregister(sh)
    #else
       #define IPS_REGISTER_HOSTS(SHT)      (!ips_detect(SHT))
       #define IPS_UNREGISTER_HOSTS(SHT)
@@ -451,9 +453,11 @@
     * Scsi_Host Template
     */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+   static int ips_proc24_info(char *, char **, off_t, int, int, int);
    static void ips_select_queue_depth(struct Scsi_Host *, Scsi_Device *);
    static int ips_biosparam(Disk *disk, kdev_t dev, int geom[]);
 #else
+   int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
    static int ips_biosparam(struct scsi_device *sdev, struct block_device *bdev,
 		sector_t capacity, int geom[]);
    int ips_slave_configure(Scsi_Device *SDptr);

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH2.5] ips 2/4: 2.4 resync
  2003-08-15 12:43 [PATCH2.5] ips 2/4: 2.4 resync David Jeffery
@ 2003-08-15 20:56 ` Jeff Garzik
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2003-08-15 20:56 UTC (permalink / raw)
  To: David Jeffery; +Cc: linux-scsi@vger.kernel.org

David Jeffery wrote:
> This patch is a resync with the 6.10 driver for 2.4 and updates the 2.4
> compatability code.  It adds a new wrapper function for differences
> between the 2.4 and 2.6 scsi proc interface,  forces pci posting in 3
> places, corrects using a meaningless constant of 0x80 to 0, and syncs
> comments that had changed. 

> @@ -257,9 +259,12 @@
>  	.queuecommand = ips_queue,
>  	.eh_abort_handler = ips_eh_abort,
>  	.eh_host_reset_handler = ips_eh_reset,
> +	.proc_name = "ips",
>  #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
> +	.proc_info = ips_proc_info,
>  	.slave_configure = ips_slave_configure,
>  #else
> +	.proc_info = ips_proc24_info,
>  	.select_queue_depths = ips_select_queue_depth,
>  #endif

I wonder if you would object to removing the proc_info hook and code 
completely?  No big deal if the answer is "no", but overall, I would 
prefer to continue the current process of trimming down procfs.

If you want to export some information that's not exported currently, 
you can use sysfs attributes for that.



> @@ -4867,6 +4887,7 @@
>  	METHOD_TRACE("ips_enable_int_copperhead", 1);
>  
>  	outb(ha->io_addr + IPS_REG_HISR, IPS_BIT_EI);
> +	inb(ha->io_addr + IPS_REG_HISR);	/*Ensure PCI Posting Completes*/
>  }
>  
>  /****************************************************************************/
> @@ -4883,6 +4904,7 @@
>  	METHOD_TRACE("ips_enable_int_copperhead_memio", 1);
>  
>  	writeb(IPS_BIT_EI, ha->mem_ptr + IPS_REG_HISR);
> +	readb(ha->mem_ptr + IPS_REG_HISR);	/*Ensure PCI Posting Completes*/
>  }
>  
>  /****************************************************************************/
> @@ -4903,6 +4925,7 @@
>  	Oimr = readl(ha->mem_ptr + IPS_REG_I960_OIMR);
>  	Oimr &= ~0x08;
>  	writel(Oimr, ha->mem_ptr + IPS_REG_I960_OIMR);
> +	readl(ha->mem_ptr + IPS_REG_I960_OIMR);	/*Ensure PCI Posting Completes*/
>  }
>  
>  /****************************************************************************/

Nice :)

	Jeff




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-08-15 20:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-08-15 12:43 [PATCH2.5] ips 2/4: 2.4 resync David Jeffery
2003-08-15 20:56 ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox