All of lore.kernel.org
 help / color / mirror / Atom feed
* RE: [PATCH] gdth driver for 2.4.23-pre4
@ 2004-01-08 19:19 Salyzyn, Mark
  2004-01-08 19:32 ` Arjan van de Ven
  2004-01-08 20:06 ` Xose Vazquez Perez
  0 siblings, 2 replies; 9+ messages in thread
From: Salyzyn, Mark @ 2004-01-08 19:19 UTC (permalink / raw)
  To: 'Xose Vazquez Perez', 'Christoph Hellwig'
  Cc: 'linux-scsi', 'Tosatti'

Time and priority is the enemy ... not the maintainers, gatekeepers,
volunteeers or the vendors.

There are currently three effective code bases a vendor driver maintainer is
to submit to Distribution, 2.4.* and 2.6.*. OEMs and Channel, the vendor's
customers, only concern themselves about Distributions.

Give me a guess as to where 99% of the noise that enters my cube results
from?

With the Distributions producing errata kernels at a breakneck pace (12
different errata kernels over Christmas break), testers bombarding us with
problem reports to distill to root cause, sometimes the job gets kind of
overwhelming.

I only try to do my best to ensure that all the mindshare of improvements
and enhancements that result from OEM, Channel, internal testing gets into
all trees. Let's just assume that *this* submission is a request for
comment, which was what I had in mind, and not a flashpoint. Soon, or rather
as soon as I can get to it, I will try to produce bite size diffs for each
class of fix to be taken each on their own merit in an effort to synchronize
the 2.4.* tree with the 2.6.* and Distribution trees.

Sincerely -- Mark Salyzyn

-----Original Message-----
From: linux-scsi-owner@vger.kernel.org
[mailto:linux-scsi-owner@vger.kernel.org] On Behalf Of Xose Vazquez Perez
Sent: Thursday, January 08, 2004 1:47 PM
To: Christoph Hellwig
Cc: linux-scsi; Tosatti
Subject: Re: [PATCH] gdth driver for 2.4.23-pre4

Christoph Hellwig wrote:

> The update doesn't look like critical fixes.  

gdth not, but ask in Linux-Poweredge@dell.com about _aacraid_ driver
stability and search in bugzilla.redhat.com about it. Or ask too to
dpt_i2o or fusion customers

> And if the vendors don't want to update their drivers that's the best
> sign for possible customers to buy other hardware instead..

the truth is that they update the driver and the patch is real.
But nobody cares for it.

who is guilty?  linux kernel maintainers or vendor driver maintainer ?

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* RE: [PATCH] gdth driver for 2.4.23-pre4
  2004-01-08 19:19 [PATCH] gdth driver for 2.4.23-pre4 Salyzyn, Mark
@ 2004-01-08 19:32 ` Arjan van de Ven
  2004-01-08 20:06 ` Xose Vazquez Perez
  1 sibling, 0 replies; 9+ messages in thread
From: Arjan van de Ven @ 2004-01-08 19:32 UTC (permalink / raw)
  To: Salyzyn, Mark
  Cc: 'Xose Vazquez Perez', 'Christoph Hellwig',
	'linux-scsi', 'Tosatti'

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

On Thu, 2004-01-08 at 20:19, Salyzyn, Mark wrote:
> Time and priority is the enemy ... not the maintainers, gatekeepers,
> volunteeers or the vendors.
> 
> There are currently three effective code bases a vendor driver maintainer is
> to submit to Distribution, 2.4.* and 2.6.*. OEMs and Channel, the vendor's
> customers, only concern themselves about Distributions.

As someone who maintains a kernel tree for a distribution I urge you to
care more about upstream kernels. Lets make it easier: I will reject any
patch to this driver that is not in 2.4 and/or 2.6. And the way to get
things into 2.4 and/or 2.6 is via linux-scsi.


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: [PATCH] gdth driver for 2.4.23-pre4
  2004-01-08 19:19 [PATCH] gdth driver for 2.4.23-pre4 Salyzyn, Mark
  2004-01-08 19:32 ` Arjan van de Ven
@ 2004-01-08 20:06 ` Xose Vazquez Perez
  1 sibling, 0 replies; 9+ messages in thread
From: Xose Vazquez Perez @ 2004-01-08 20:06 UTC (permalink / raw)
  To: Salyzyn, Mark
  Cc: 'Christoph Hellwig', 'linux-scsi', 'Tosatti'

Salyzyn, Mark wrote:

> Time and priority is the enemy ... not the maintainers, gatekeepers,
> volunteeers or the vendors.

So much to do; so little time

> There are currently three effective code bases a vendor driver maintainer is
> to submit to Distribution, 2.4.* and 2.6.*. OEMs and Channel, the vendor's
> customers, only concern themselves about Distributions.

Forget distributions kernel, OEM, Channels ..... If your drivers are in
the official tree you work is done. Easy.


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

* RE: [PATCH] gdth driver for 2.4.23-pre4
@ 2004-01-08 20:39 Hammer, Jack
  0 siblings, 0 replies; 9+ messages in thread
From: Hammer, Jack @ 2004-01-08 20:39 UTC (permalink / raw)
  To: Xose Vazquez Perez, Salyzyn, Mark
  Cc: 'Christoph Hellwig', 'linux-scsi', 'Tosatti'


Not at all true ( or easy ) in the real world.  Driver owners are actually
in the business of selling adapters ( or devices ), not software drivers.

When a new device or adapter is announced, a driver for it must be made
available immediately to the customer ( OEM and/or channel ) or the device
is useless.  There is no luxury of waiting of couple months for a new driver
to be accepted into a kernel, and then later make it's way into a
distribution before you can start selling your product.

You must also understand that new driver code sometimes cannot be
distributed to a mailing list prior to a new product's announcment or else
we would be violating confidential "unannounced product" information of the
company.  It's a viscious cycle, and not an ideal situation, but one we
vendors must live with.

I agree we need to drive everything into the kernel as soon as possible, but
that will never be the only work that must be done by vendors.

 


-----Original Message-----
From: linux-scsi-owner@vger.kernel.org
[mailto:linux-scsi-owner@vger.kernel.org] On Behalf Of Xose Vazquez Perez
Sent: Thursday, January 08, 2004 3:06 PM
To: Salyzyn, Mark
Cc: 'Christoph Hellwig'; 'linux-scsi'; 'Tosatti'
Subject: Re: [PATCH] gdth driver for 2.4.23-pre4

Salyzyn, Mark wrote:

> Time and priority is the enemy ... not the maintainers, gatekeepers, 
> volunteeers or the vendors.

So much to do; so little time

> There are currently three effective code bases a vendor driver 
> maintainer is to submit to Distribution, 2.4.* and 2.6.*. OEMs and 
> Channel, the vendor's customers, only concern themselves about
Distributions.

Forget distributions kernel, OEM, Channels ..... If your drivers are in the
official tree you work is done. Easy.

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the
body of a message to majordomo@vger.kernel.org More majordomo info at
http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] gdth driver for 2.4.23-pre4
  2004-01-08 18:33     ` Christoph Hellwig
@ 2004-01-08 18:47       ` Xose Vazquez Perez
  0 siblings, 0 replies; 9+ messages in thread
From: Xose Vazquez Perez @ 2004-01-08 18:47 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-scsi, Tosatti

Christoph Hellwig wrote:

> The update doesn't look like critical fixes.  

gdth not, but ask in Linux-Poweredge@dell.com about _aacraid_ driver
stability and search in bugzilla.redhat.com about it. Or ask too to
dpt_i2o or fusion customers

> And if the vendors don't want to update their drivers that's the best
> sign for possible customers to buy other hardware instead..

the truth is that they update the driver and the patch is real.
But nobody cares for it.

who is guilty?  linux kernel maintainers or vendor driver maintainer ?


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

* Re: [PATCH] gdth driver for 2.4.23-pre4
  2004-01-08 18:25   ` Xose Vazquez Perez
@ 2004-01-08 18:33     ` Christoph Hellwig
  2004-01-08 18:47       ` Xose Vazquez Perez
  0 siblings, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2004-01-08 18:33 UTC (permalink / raw)
  To: Xose Vazquez Perez; +Cc: linux-scsi, Tosatti

On Thu, Jan 08, 2004 at 07:25:15PM +0100, Xose Vazquez Perez wrote:
> But if the maintainer only hangs the patch in the vendor web
> and _nobody_ take care for it. what can we do?

The update doesn't look like critical fixes.  And if the vendors don't
want to update their drivers that's the best sign for possible customers
to buy other hardware instead..


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

* Re: [PATCH] gdth driver for 2.4.23-pre4
  2004-01-08 17:13 ` Christoph Hellwig
@ 2004-01-08 18:25   ` Xose Vazquez Perez
  2004-01-08 18:33     ` Christoph Hellwig
  0 siblings, 1 reply; 9+ messages in thread
From: Xose Vazquez Perez @ 2004-01-08 18:25 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-scsi, Tosatti

Christoph Hellwig wrote:

> On Wed, Jan 07, 2004 at 07:56:04PM +0100, Xose Vazquez Perez wrote:
> 
>>hi,
>>
>>latest driver update for 2.4 kernel:
>>
>>- Disabled scan for EISA controllers
>>- Using CACHE_READ_OEM_STRING_RECORD_IOCTL to set vendor
>>  for SCSI inquiry.
>>- Added support for XSCALE based RAID controllers
>>- Reformated some code chunks
> 
> 
> Patch looks ok, but I'd prefer a submission by the maintainer.

*me too*

But if the maintainer only hangs the patch in the vendor web
and _nobody_ take care for it. what can we do?

againg, ask to them:
Achim Leubner <Achim_Leubner@adaptec.com> or Johannes Dinner <Johannes_Dinner@adaptec.com>


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

* Re: [PATCH] gdth driver for 2.4.23-pre4
  2004-01-07 18:56 Xose Vazquez Perez
@ 2004-01-08 17:13 ` Christoph Hellwig
  2004-01-08 18:25   ` Xose Vazquez Perez
  0 siblings, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2004-01-08 17:13 UTC (permalink / raw)
  To: Xose Vazquez Perez; +Cc: linux-scsi, Tosatti

On Wed, Jan 07, 2004 at 07:56:04PM +0100, Xose Vazquez Perez wrote:
> hi,
> 
> latest driver update for 2.4 kernel:
> 
> - Disabled scan for EISA controllers
> - Using CACHE_READ_OEM_STRING_RECORD_IOCTL to set vendor
>   for SCSI inquiry.
> - Added support for XSCALE based RAID controllers
> - Reformated some code chunks

Patch looks ok, but I'd prefer a submission by the maintainer.


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

* [PATCH] gdth driver for 2.4.23-pre4
@ 2004-01-07 18:56 Xose Vazquez Perez
  2004-01-08 17:13 ` Christoph Hellwig
  0 siblings, 1 reply; 9+ messages in thread
From: Xose Vazquez Perez @ 2004-01-07 18:56 UTC (permalink / raw)
  To: linux-scsi, Tosatti

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

hi,

latest driver update for 2.4 kernel:

- Disabled scan for EISA controllers
- Using CACHE_READ_OEM_STRING_RECORD_IOCTL to set vendor
  for SCSI inquiry.
- Added support for XSCALE based RAID controllers
- Reformated some code chunks

complete driver is at: http://www.icp-vortex.com/english/download/rz_neu/linux/linux_e.htm

-thanks-

[-- Attachment #2: gdth.patch --]
[-- Type: text/plain, Size: 28713 bytes --]

diff -Nuar o/drivers/scsi/gdth.c n/drivers/scsi/gdth.c
--- o/drivers/scsi/gdth.c	2004-01-07 19:28:08.000000000 +0100
+++ n/drivers/scsi/gdth.c	2003-08-28 11:31:52.000000000 +0200
@@ -4,11 +4,12 @@
  * Intel Corporation:  Storage RAID Controllers                         *
  *                                                                      *
  * gdth.c                                                               *
- * Copyright (C) 1995-02 ICP vortex, an Intel company,  Achim Leubner   *
- * <achim.leubner@intel.com>                                            *
+ * Copyright (C) 1995-03 ICP vortex, Achim Leubner                      *
+ * <achim_leubner@adaptec.com>                                          *
  *                                                                      *
- * Additions/Fixes: Boji Tony Kannanthanam                              *
- * <boji.t.kannanthanam@intel.com>                                      *
+ * Additions/Fixes:                                                     * 
+ * Boji Tony Kannanthanam <boji.t.kannanthanam@intel.com>               *
+ * Johannes Dinner <johannes_dinner@adaptec.com>                        *
  *                                                                      *
  * This program is free software; you can redistribute it and/or modify *
  * it under the terms of the GNU General Public License as published    *
@@ -24,9 +25,19 @@
  * along with this kernel; if not, write to the Free Software           *
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            *
  *                                                                      *
- * Tested with Linux 1.2.13, ..., 2.2.20, ..., 2.4.18                   *
+ * Tested with Linux 1.2.13, ..., 2.2.20, ..., 2.4.22                   *
  *                                                                      *
  * $Log: gdth.c,v $
+ * Revision 1.63.1  2003/08/04         johannes
+ * Disabled scan for EISA controllers
+ *
+ * Revision 1.63  2002/11/08 09:35:22  boji
+ * Using CACHE_READ_OEM_STRING_RECORD_IOCTL to set vendor
+ * for SCSI inquiry.
+ *
+ * Revision 1.62  2002/10/16 09:35:22  boji
+ * Added support for XSCALE based RAID controllers
+ *
  * Revision 1.61  2002/10/03 09:35:22  boji
  * Fixed SCREENSERVICE intialisation in SMP cases.
  * Added checks for gdth_polling before GDTH_HA_LOCK
@@ -282,10 +293,12 @@
  *                              access a shared resource from several nodes, 
  *                              appropiate controller firmware required
  * shared_access:N              enable driver reserve/release protocol
+ * probe_eisa_isa:Y             scan for EISA/ISA controllers
+ * probe_eisa_isa:N             do not scan for EISA/ISA controllers
  *
  * The default values are: "gdth=disable:N,reserve_mode:1,reverse_scan:N,
  *                          max_ids:127,rescan:N,virt_ctr:N,hdr_channel:0,
- *                          shared_access:Y".
+ *                          shared_access:Y,probe_eisa_isa:N".
  * Here is another example: "gdth=reserve_list:0,1,2,0,0,1,3,0,rescan:Y".
  * 
  * When loading the gdth driver as a module, the same options are available. 
@@ -295,7 +308,8 @@
  * '1' in place of 'Y' and '0' in place of 'N'.
  * 
  * Default: "modprobe gdth disable=0 reserve_mode=1 reverse_scan=0
- *           max_ids=127 rescan=0 virt_ctr=0 hdr_channel=0 shared_access=0"
+ *           max_ids=127 rescan=0 virt_ctr=0 hdr_channel=0 shared_access=0 
+ *           probe_eisa_isa=0"
  * The other example: "modprobe gdth reserve_list=0,1,2,0,0,1,3,0 rescan=1".
  */
 
@@ -686,6 +700,8 @@
 static int virt_ctr = 0;
 /* shared access */
 static int shared_access = 1;
+/* enable support for EISA and ISA controllers */
+static int probe_eisa_isa = 0;
 
 #ifdef MODULE
 #if LINUX_VERSION_CODE >= 0x02011A
@@ -700,6 +716,7 @@
 MODULE_PARM(rescan, "i");
 MODULE_PARM(virt_ctr, "i");
 MODULE_PARM(shared_access, "i");
+MODULE_PARM(probe_eisa_isa, "i");
 MODULE_AUTHOR("Achim Leubner");
 #endif
 #if LINUX_VERSION_CODE >= 0x02040B
@@ -814,6 +831,8 @@
                     PCI_DEVICE_ID_VORTEX_GDTNEWRX);
     gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_INTEL,
                     PCI_DEVICE_ID_INTEL_SRC);
+    gdth_search_dev(pcistr, &cnt, PCI_VENDOR_ID_INTEL,
+                    PCI_DEVICE_ID_INTEL_SRC_XSCALE);
     return cnt;
 }
 
@@ -824,6 +843,7 @@
 static struct pci_device_id gdthtable[] = {
 	{PCI_VENDOR_ID_VORTEX,PCI_ANY_ID,PCI_ANY_ID, PCI_ANY_ID },
 	{PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_SRC,PCI_ANY_ID,PCI_ANY_ID }, 
+	{PCI_VENDOR_ID_INTEL,PCI_DEVICE_ID_INTEL_SRC_XSCALE,PCI_ANY_ID,PCI_ANY_ID }, 
 	{0}
 };
 MODULE_DEVICE_TABLE(pci,gdthtable);
@@ -1512,6 +1532,11 @@
                                    PCI_ROM_ADDRESS, rom_addr);
 #endif
         
+	/* Ensure that it is safe to access the non HW portions of DPMEM.
+	 * Aditional check needed for Xscale based RAID controllers */
+	while( ((int)gdth_readb(&((gdt6m_dpram_str *)ha->brd)->i960r.sema0_reg) ) & 3 )
+		gdth_delay(1);
+	
         /* check and reset interface area */
         dp6m_ptr = (gdt6m_dpram_str *)ha->brd;
         gdth_writel(DPMEM_MAGIC, &dp6m_ptr->u);
@@ -1966,6 +1991,8 @@
     gdth_raw_iochan_str *iocr;
     gdth_arcdl_str *alst;
     gdth_alist_str *alst2;
+    gdth_oem_str_ioctl *oemstr;
+
 #ifdef GDTH_RTC
     unchar rtc[12];
     ulong flags;
@@ -2234,6 +2261,28 @@
         }
     }
 
+    /* Determine OEM string using IOCTL*/
+        oemstr = (gdth_oem_str_ioctl *)ha->pscratch;
+	    oemstr->params.ctl_version=0x01;
+	    oemstr->params.buffer_size= (sizeof(oemstr->text));
+	    if (gdth_internal_cmd(hanum,CACHESERVICE,GDT_IOCTL,CACHE_READ_OEM_STRING_RECORD,
+		INVALID_CHANNEL,sizeof(gdth_oem_str_ioctl))) {
+		TRACE2("gdth_search_drives(): CACHE_READ_OEM_STRING_RECORD IOCTL Successful. \n");
+		printk("GDT CTR%d Vendor: %s \n", hanum, oemstr->text.oem_company_name);
+		/* Save the Host Drive inquiry data */
+		strncpy(ha->oem_name,oemstr->text.scsi_host_drive_inquiry_vendor_id,7);
+		ha->oem_name[7]='\0';
+	    }
+	    else
+	    {
+		/* Old method, based on PCI ID */
+		TRACE2("gdth_search_drives(): CACHE_READ_OEM_STRING_RECORD IOCTL Failed. \n");
+        	if (ha->oem_id == OEM_ID_INTEL)
+            		strcpy(ha->oem_name,"Intel  ");
+        	else 
+            		strcpy(ha->oem_name,"ICP    ");
+	    }
+    
     /* scanning for host drives */
     for (i = 0; i < cdev_cnt; ++i) 
         gdth_analyse_hdrive(hanum,i);
@@ -2707,10 +2756,7 @@
         inq.version   = 2;
         inq.resp_aenc = 2;
         inq.add_length= 32;
-        if (ha->oem_id == OEM_ID_INTEL)
-            strcpy(inq.vendor,"Intel  ");
-        else 
-            strcpy(inq.vendor,"ICP    ");
+	strcpy(inq.vendor,ha->oem_name);
         sprintf(inq.product,"Host Drive  #%02d",t);
         strcpy(inq.revision,"   ");
         gdth_copy_internal_data(scp,(char*)&inq,sizeof(gdth_inq_data));
@@ -3943,6 +3989,8 @@
             virt_ctr = val;
         else if (!strncmp(argv, "shared_access:", 14))
             shared_access = val;
+        else if (!strncmp(argv, "probe_eisa_isa:", 15))
+            probe_eisa_isa = val;
         else if (!strncmp(argv, "reserve_list:", 13)) {
             reserve_list[0] = val;
             for (i = 1; i < MAX_RES_ARGS; i++) {
@@ -4023,222 +4071,223 @@
     gdth_polling = TRUE; b = 0;
     gdth_clear_events();
 
-    /* scanning for controllers, at first: ISA controller */
-    for (isa_bios=0xc8000UL; isa_bios<=0xd8000UL; isa_bios+=0x8000UL) {
-        if (gdth_ctr_count >= MAXHA) 
-            break;
-        if (gdth_search_isa(isa_bios)) {        /* controller found */
-            shp = scsi_register(shtp,sizeof(gdth_ext_str));
-            if(shp == NULL)
-            	continue;
-            ha = HADATA(shp);
-            if (!gdth_init_isa(isa_bios,ha)) {
-                scsi_unregister(shp);
-                continue;
-            }
+    if(probe_eisa_isa) {    /* As default we do not probe for EISA or ISA controllers */
+        /* scanning for controllers, at first: ISA controller */
+        for (isa_bios=0xc8000UL; isa_bios<=0xd8000UL; isa_bios+=0x8000UL) {
+            if (gdth_ctr_count >= MAXHA) 
+                break;
+            if (gdth_search_isa(isa_bios)) {        /* controller found */
+                shp = scsi_register(shtp,sizeof(gdth_ext_str));
+                if (shp == NULL)
+                    continue;
+                ha = HADATA(shp);
+                if (!gdth_init_isa(isa_bios,ha)) {
+                    scsi_unregister(shp);
+                    continue;
+                }
 #ifdef __ia64__
-            break;
+                break;
 #else
-            /* controller found and initialized */
-            printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n",
-                   isa_bios,ha->irq,ha->drq);
+                /* controller found and initialized */
+                printk("Configuring GDT-ISA HA at BIOS 0x%05X IRQ %u DRQ %u\n",
+                       isa_bios,ha->irq,ha->drq);
 
 #if LINUX_VERSION_CODE >= 0x010346 
-            if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha))
+                if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha))
 #else
-            if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth")) 
+                if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth")) 
 #endif
-            {
-                printk("GDT-ISA: Unable to allocate IRQ\n");
-                scsi_unregister(shp);
-                continue;
-            }
-            if (request_dma(ha->drq,"gdth")) {
-                printk("GDT-ISA: Unable to allocate DMA channel\n");
+                {
+                    printk("GDT-ISA: Unable to allocate IRQ\n");
+                    scsi_unregister(shp);
+                    continue;
+                }
+                if (request_dma(ha->drq,"gdth")) {
+                    printk("GDT-ISA: Unable to allocate DMA channel\n");
 #if LINUX_VERSION_CODE >= 0x010346 
-                free_irq(ha->irq,ha);
+                    free_irq(ha->irq,ha);
 #else
-                free_irq(ha->irq);
+                    free_irq(ha->irq);
 #endif
-                scsi_unregister(shp);
-                continue;
-            }
-            set_dma_mode(ha->drq,DMA_MODE_CASCADE);
-            enable_dma(ha->drq);
-            shp->unchecked_isa_dma = 1;
-            shp->irq = ha->irq;
-            shp->dma_channel = ha->drq;
-            hanum = gdth_ctr_count;         
-            gdth_ctr_tab[gdth_ctr_count++] = shp;
-            gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+                    scsi_unregister(shp);
+                    continue;
+                }
+                set_dma_mode(ha->drq,DMA_MODE_CASCADE);
+                enable_dma(ha->drq);
+                shp->unchecked_isa_dma = 1;
+                shp->irq = ha->irq;
+                shp->dma_channel = ha->drq;
+                hanum = gdth_ctr_count;         
+                gdth_ctr_tab[gdth_ctr_count++] = shp;
+                gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
 
-            NUMDATA(shp)->hanum = (ushort)hanum;
-            NUMDATA(shp)->busnum= 0;
+                NUMDATA(shp)->hanum = (ushort)hanum;
+                NUMDATA(shp)->busnum= 0;
 
-            ha->pccb = CMDDATA(shp);
+                ha->pccb = CMDDATA(shp);
 #if LINUX_VERSION_CODE >= 0x020322
-            ha->pscratch = (void *) __get_free_pages(GFP_ATOMIC | GFP_DMA, 
-                                                     GDTH_SCRATCH_ORD);
+                ha->pscratch = (void *) __get_free_pages(GFP_ATOMIC | GFP_DMA, 
+                                                         GDTH_SCRATCH_ORD);
 #else
-            ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA);
+                ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA);
 #endif
-            ha->scratch_busy = FALSE;
-            ha->req_first = NULL;
-            ha->tid_cnt = MAX_HDRIVES;
-            if (max_ids > 0 && max_ids < ha->tid_cnt)
-                ha->tid_cnt = max_ids;
-            for (i=0; i<GDTH_MAXCMDS; ++i)
-                ha->cmd_tab[i].cmnd = UNUSED_CMND;
-            ha->scan_mode = rescan ? 0x10 : 0;
-
-            if (ha->pscratch == NULL || !gdth_search_drives(hanum)) {
-                printk("GDT-ISA: Error during device scan\n");
-                --gdth_ctr_count;
-                --gdth_ctr_vcount;
-                if (ha->pscratch != NULL)
+                ha->scratch_busy = FALSE;
+                ha->req_first = NULL;
+                ha->tid_cnt = MAX_HDRIVES;
+                if (max_ids > 0 && max_ids < ha->tid_cnt)
+                    ha->tid_cnt = max_ids;
+                for (i=0; i<GDTH_MAXCMDS; ++i)
+                    ha->cmd_tab[i].cmnd = UNUSED_CMND;
+                ha->scan_mode = rescan ? 0x10 : 0;
+
+                if (ha->pscratch == NULL || !gdth_search_drives(hanum)) {
+                    printk("GDT-ISA: Error during device scan\n");
+                    --gdth_ctr_count;
+                    --gdth_ctr_vcount;
+                    if (ha->pscratch != NULL)
 #if LINUX_VERSION_CODE >= 0x020322
-                    free_pages((unsigned long)ha->pscratch, GDTH_SCRATCH_ORD);
+                        free_pages((unsigned long)ha->pscratch, GDTH_SCRATCH_ORD);
 #else
-                    scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH);
+                        scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH);
 #endif
 #if LINUX_VERSION_CODE >= 0x010346 
-                free_irq(ha->irq,ha);
+                    free_irq(ha->irq,ha);
 #else
-                free_irq(ha->irq);
+                    free_irq(ha->irq);
 #endif
-                scsi_unregister(shp);
-                continue;
-            }
-            if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
-                hdr_channel = ha->bus_cnt;
-            ha->virt_bus = hdr_channel;
+                    scsi_unregister(shp);
+                    continue;
+                }
+                if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
+                    hdr_channel = ha->bus_cnt;
+                ha->virt_bus = hdr_channel;
 
 #if LINUX_VERSION_CODE >= 0x020000
-            shp->max_id      = ha->tid_cnt;
-            shp->max_lun     = MAXLUN;
-            shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
-            if (virt_ctr)  
+                shp->max_id      = ha->tid_cnt;
+                shp->max_lun     = MAXLUN;
+                shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
+                if (virt_ctr)  
 #endif
-            {
-                virt_ctr = 1;
-                /* register addit. SCSI channels as virtual controllers */
-                for (b = 1; b < ha->bus_cnt + 1; ++b) {
-                    shp = scsi_register(shtp,sizeof(gdth_num_str));
-                    shp->unchecked_isa_dma = 1;
-                    shp->irq = ha->irq;
-                    shp->dma_channel = ha->drq;
-                    gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
-                    NUMDATA(shp)->hanum = (ushort)hanum;
-                    NUMDATA(shp)->busnum = b;
-                }
-            }  
+                {
+                    virt_ctr = 1;
+                    /* register addit. SCSI channels as virtual controllers */
+                    for (b = 1; b < ha->bus_cnt + 1; ++b) {
+                        shp = scsi_register(shtp,sizeof(gdth_num_str));
+                        shp->unchecked_isa_dma = 1;
+                        shp->irq = ha->irq;
+                        shp->dma_channel = ha->drq;
+                        gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+                        NUMDATA(shp)->hanum = (ushort)hanum;
+                        NUMDATA(shp)->busnum = b;
+                    }
+                }  
 
-            GDTH_INIT_LOCK_HA(ha);
-            gdth_enable_int(hanum);
+                GDTH_INIT_LOCK_HA(ha);
+                gdth_enable_int(hanum);
 #endif /* !__ia64__ */
+            }
         }
-    }
 
-    /* scanning for EISA controllers */
-    for (eisa_slot=0x1000; eisa_slot<=0x8000; eisa_slot+=0x1000) {
-        if (gdth_ctr_count >= MAXHA) 
-            break;
-        if (gdth_search_eisa(eisa_slot)) {      /* controller found */
-            shp = scsi_register(shtp,sizeof(gdth_ext_str));
-	    if(shp == NULL)
-		    continue;
-
-            ha = HADATA(shp);
-            if (!gdth_init_eisa(eisa_slot,ha)) {
-                scsi_unregister(shp);
-                continue;
-            }
-            /* controller found and initialized */
-            printk("Configuring GDT-EISA HA at Slot %d IRQ %u\n",
-                   eisa_slot>>12,ha->irq);
+        /* scanning for EISA controllers */
+        for (eisa_slot=0x1000; eisa_slot<=0x8000; eisa_slot+=0x1000) {
+            if (gdth_ctr_count >= MAXHA) 
+                break;
+            if (gdth_search_eisa(eisa_slot)) {      /* controller found */
+                shp = scsi_register(shtp,sizeof(gdth_ext_str));
+                if (shp == NULL)
+                    continue;
+                ha = HADATA(shp);
+                if (!gdth_init_eisa(eisa_slot,ha)) {
+                    scsi_unregister(shp);
+                    continue;
+                }
+                /* controller found and initialized */
+                printk("Configuring GDT-EISA HA at Slot %d IRQ %u\n",
+                       eisa_slot>>12,ha->irq);
 
 #if LINUX_VERSION_CODE >= 0x010346 
-            if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha))
+                if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth",ha))
 #else
-            if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth")) 
+                if (request_irq(ha->irq,gdth_interrupt,SA_INTERRUPT,"gdth")) 
 #endif
-            {
-                printk("GDT-EISA: Unable to allocate IRQ\n");
-                scsi_unregister(shp);
-                continue;
-            }
-            shp->unchecked_isa_dma = 0;
-            shp->irq = ha->irq;
-            shp->dma_channel = 0xff;
-            hanum = gdth_ctr_count;
-            gdth_ctr_tab[gdth_ctr_count++] = shp;
-            gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
-
-            NUMDATA(shp)->hanum = (ushort)hanum;
-            NUMDATA(shp)->busnum= 0;
-            TRACE2(("EISA detect Bus 0: hanum %d\n",
-                    NUMDATA(shp)->hanum));
+                {
+                    printk("GDT-EISA: Unable to allocate IRQ\n");
+                    scsi_unregister(shp);
+                    continue;
+                }
+                shp->unchecked_isa_dma = 0;
+                shp->irq = ha->irq;
+                shp->dma_channel = 0xff;
+                hanum = gdth_ctr_count;
+                gdth_ctr_tab[gdth_ctr_count++] = shp;
+                gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+
+                NUMDATA(shp)->hanum = (ushort)hanum;
+                NUMDATA(shp)->busnum= 0;
+                TRACE2(("EISA detect Bus 0: hanum %d\n",
+                        NUMDATA(shp)->hanum));
 
-            ha->pccb = CMDDATA(shp);
+                ha->pccb = CMDDATA(shp);
 #if LINUX_VERSION_CODE >= 0x020322
-            ha->pscratch = (void *) __get_free_pages(GFP_ATOMIC | GFP_DMA, 
-                                                     GDTH_SCRATCH_ORD);
+                ha->pscratch = (void *) __get_free_pages(GFP_ATOMIC | GFP_DMA, 
+                                                         GDTH_SCRATCH_ORD);
 #else
-            ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA);
+                ha->pscratch = scsi_init_malloc(GDTH_SCRATCH, GFP_ATOMIC | GFP_DMA);
 #endif
-            ha->scratch_busy = FALSE;
-            ha->req_first = NULL;
-            ha->tid_cnt = MAX_HDRIVES;
-            if (max_ids > 0 && max_ids < ha->tid_cnt)
-                ha->tid_cnt = max_ids;
-            for (i=0; i<GDTH_MAXCMDS; ++i)
-                ha->cmd_tab[i].cmnd = UNUSED_CMND;
-            ha->scan_mode = rescan ? 0x10 : 0;
-
-            if (ha->pscratch == NULL || !gdth_search_drives(hanum)) {
-                printk("GDT-EISA: Error during device scan\n");
-                --gdth_ctr_count;
-                --gdth_ctr_vcount;
-                if (ha->pscratch != NULL)
+                ha->scratch_busy = FALSE;
+                ha->req_first = NULL;
+                ha->tid_cnt = MAX_HDRIVES;
+                if (max_ids > 0 && max_ids < ha->tid_cnt)
+                    ha->tid_cnt = max_ids;
+                for (i=0; i<GDTH_MAXCMDS; ++i)
+                    ha->cmd_tab[i].cmnd = UNUSED_CMND;
+                ha->scan_mode = rescan ? 0x10 : 0;
+
+                if (ha->pscratch == NULL || !gdth_search_drives(hanum)) {
+                    printk("GDT-EISA: Error during device scan\n");
+                    --gdth_ctr_count;
+                    --gdth_ctr_vcount;
+                    if (ha->pscratch != NULL)
 #if LINUX_VERSION_CODE >= 0x020322
-                    free_pages((unsigned long)ha->pscratch, GDTH_SCRATCH_ORD);
+                        free_pages((unsigned long)ha->pscratch, GDTH_SCRATCH_ORD);
 #else
-                    scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH);
+                        scsi_init_free((void *)ha->pscratch, GDTH_SCRATCH);
 #endif
 #if LINUX_VERSION_CODE >= 0x010346 
-                free_irq(ha->irq,ha);
+                    free_irq(ha->irq,ha);
 #else
-                free_irq(ha->irq);
+                    free_irq(ha->irq);
 #endif
-                scsi_unregister(shp);
-                continue;
-            }
-            if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
-                hdr_channel = ha->bus_cnt;
-            ha->virt_bus = hdr_channel;
+                    scsi_unregister(shp);
+                    continue;
+                }
+                if (hdr_channel < 0 || hdr_channel > ha->bus_cnt)
+                    hdr_channel = ha->bus_cnt;
+                ha->virt_bus = hdr_channel;
 
 #if LINUX_VERSION_CODE >= 0x020000
-            shp->max_id      = ha->tid_cnt;
-            shp->max_lun     = MAXLUN;
-            shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
-            if (virt_ctr)  
+                shp->max_id      = ha->tid_cnt;
+                shp->max_lun     = MAXLUN;
+                shp->max_channel = virt_ctr ? 0 : ha->bus_cnt;
+                if (virt_ctr)  
 #endif
-            {
-                virt_ctr = 1;
-                /* register addit. SCSI channels as virtual controllers */
-                for (b = 1; b < ha->bus_cnt + 1; ++b) {
-                    shp = scsi_register(shtp,sizeof(gdth_num_str));
-                    shp->unchecked_isa_dma = 0;
-                    shp->irq = ha->irq;
-                    shp->dma_channel = 0xff;
-                    gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
-                    NUMDATA(shp)->hanum = (ushort)hanum;
-                    NUMDATA(shp)->busnum = b;
-                }
-            }  
+                {
+                    virt_ctr = 1;
+                    /* register addit. SCSI channels as virtual controllers */
+                    for (b = 1; b < ha->bus_cnt + 1; ++b) {
+                        shp = scsi_register(shtp,sizeof(gdth_num_str));
+                        shp->unchecked_isa_dma = 0;
+                        shp->irq = ha->irq;
+                        shp->dma_channel = 0xff;
+                        gdth_ctr_vtab[gdth_ctr_vcount++] = shp;
+                        NUMDATA(shp)->hanum = (ushort)hanum;
+                        NUMDATA(shp)->busnum = b;
+                    }
+                }  
 
-            GDTH_INIT_LOCK_HA(ha);
-            gdth_enable_int(hanum);
+                GDTH_INIT_LOCK_HA(ha);
+                gdth_enable_int(hanum);
+            }
         }
     }
 
@@ -4258,9 +4307,8 @@
             if (gdth_ctr_count >= MAXHA)
                 break;
             shp = scsi_register(shtp,sizeof(gdth_ext_str));
-	    if(shp == NULL)
-		    continue;
-
+            if (shp == NULL)
+                continue;
             ha = HADATA(shp);
             if (!gdth_init_pci(&pcistr[ctr],ha)) {
                 scsi_unregister(shp);
diff -Nuar o/drivers/scsi/gdth.h n/drivers/scsi/gdth.h
--- o/drivers/scsi/gdth.h	2004-01-07 19:28:08.000000000 +0100
+++ n/drivers/scsi/gdth.h	2003-08-14 17:02:59.000000000 +0200
@@ -4,11 +4,18 @@
 /*
  * Header file for the GDT Disk Array/Storage RAID controllers driver for Linux
  * 
- * gdth.h Copyright (C) 1995-02 ICP vortex, an Intel company, Achim Leubner
+ * gdth.h Copyright (C) 1995-03 ICP vortex, Achim Leubner
  * See gdth.c for further informations and 
  * below for supported controller types
  *
- * <achim.leubner@intel.com>
+ * <achim_leubner@adaptec.com>
+ *
+ * Additions/Fixes: Boji Tony Kannanthanam
+ * <boji.t.kannanthanam@intel.com>
+ * 
+ * $Log: gdth.h,v $
+ * Revision 1.47  2002/11/08 09:35:22  boji
+ * Added definitions for gdth_oem_str_ioctl
  *
  * $Id: gdth.h,v 1.46 2002/02/05 09:39:53 achim Exp $
  */
@@ -29,9 +36,9 @@
 /* defines, macros */
 
 /* driver version */
-#define GDTH_VERSION_STR        "2.05"
+#define GDTH_VERSION_STR        "2.06a"
 #define GDTH_VERSION            2
-#define GDTH_SUBVERSION         5
+#define GDTH_SUBVERSION         6
 
 /* protocol version */
 #define PROTOCOL_VERSION        1
@@ -142,6 +149,11 @@
 #define PCI_DEVICE_ID_INTEL_SRC		0x600
 #endif
 
+#ifndef PCI_DEVICE_ID_INTEL_SRC_XSCALE
+/* Intel Storage RAID Controller */
+#define PCI_DEVICE_ID_INTEL_SRC_XSCALE	0x601
+#endif
+
 /* limits */
 #define GDTH_SCRATCH    PAGE_SIZE               /* 4KB scratch buffer */
 #define GDTH_SCRATCH_ORD 0                      /* order 0 means 1 page */
@@ -252,6 +264,7 @@
 #define CACHE_INFO      0x04                    /* cache info */
 #define CACHE_CONFIG    0x05                    /* cache configuration */
 #define CACHE_DRV_INFO  0x07                    /* cache drive info */
+#define CACHE_READ_OEM_STRING_RECORD  0x84      /* Read the OEM String record */
 #define BOARD_FEATURES  0x15                    /* controller features */
 #define BOARD_INFO      0x28                    /* controller info */
 #define HOST_GET        0x10001L                /* get host drive list */
@@ -535,6 +548,48 @@
     unchar      ld_error;                       /* error */
 } PACKED gdth_cdrinfo_str;
 
+/* OEM String */
+typedef struct {
+    ulong32   ctl_version;
+    ulong32   file_major_version;
+    ulong32   file_minor_version;
+    ulong32   buffer_size;
+    ulong32   cpy_count;
+    ulong32   ext_error;
+    ulong32   oem_id;
+    ulong32   board_id;
+} PACKED gdth_oem_str_params ;
+
+typedef struct {
+    unchar            product_0_1_name[16];
+    unchar            product_4_5_name[16];
+    unchar            product_cluster_name[16];
+    unchar            product_reserved[16];
+    unchar            scsi_cluster_target_vendor_id[16];
+    unchar            cluster_raid_fw_name[16];
+    unchar            oem_brand_name[16];
+    unchar            oem_raid_type[16];
+    unchar            bios_type[13];
+    unchar            bios_title[50];
+    unchar            oem_company_name[37];
+    ulong32           pci_id_1;
+    ulong32           pci_id_2;
+    unchar            validation_status[84];
+    unchar            scsi_host_drive_inquiry_vendor_id[16];
+    unchar            library_file_template[32];
+    unchar            tool_name_1[32];
+    unchar            tool_name_2[32];
+    unchar            tool_name_3[32];
+    unchar            oem_contact_1[84];
+    unchar            oem_contact_2[84];
+    unchar            oem_contact_3[84];
+} gdth_oem_str;
+
+typedef struct {
+    gdth_oem_str_params  params;
+    gdth_oem_str             text;
+} gdth_oem_str_ioctl;
+
 /* board features */
 typedef struct {
     unchar      chaining;                       /* Chaining supported */
@@ -946,6 +1001,7 @@
 #if LINUX_VERSION_CODE >= 0x02015F
     spinlock_t          smp_lock;
 #endif
+    char		oem_name[8];
 } gdth_ha_str;
 
 /* structure for scsi_register(), SCSI bus != 0 */
diff -Nuar o/drivers/scsi/gdth_proc.c n/drivers/scsi/gdth_proc.c
--- o/drivers/scsi/gdth_proc.c	2004-01-07 19:28:08.000000000 +0100
+++ n/drivers/scsi/gdth_proc.c	2003-08-28 11:32:34.000000000 +0200
@@ -1464,7 +1464,7 @@
             timer_table[SCSI_TIMER].expires = jiffies + timeout;
             timer_active |= 1 << SCSI_TIMER;
         } else {
-            if (time_before(jiffies + timeout < timer_table[SCSI_TIMER].expires))
+            if (time_before(jiffies + timeout, timer_table[SCSI_TIMER].expires))
                 timer_table[SCSI_TIMER].expires = jiffies + timeout;
         }
     }


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

end of thread, other threads:[~2004-01-08 20:40 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-08 19:19 [PATCH] gdth driver for 2.4.23-pre4 Salyzyn, Mark
2004-01-08 19:32 ` Arjan van de Ven
2004-01-08 20:06 ` Xose Vazquez Perez
  -- strict thread matches above, loose matches on Subject: below --
2004-01-08 20:39 Hammer, Jack
2004-01-07 18:56 Xose Vazquez Perez
2004-01-08 17:13 ` Christoph Hellwig
2004-01-08 18:25   ` Xose Vazquez Perez
2004-01-08 18:33     ` Christoph Hellwig
2004-01-08 18:47       ` Xose Vazquez Perez

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.