[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20061101215100.GB29928@beardog.cca.cpqcorp.net>
Date: Wed, 1 Nov 2006 15:51:00 -0600
From: "Mike Miller (OS Dev)" <mikem@...rdog.cca.cpqcorp.net>
To: akpm@...l.org, jens.axboe@...cle.com
Cc: linux-kernel@...r.kernel.org, linux-scsi@...r.kernel.org
Subject: [PATCH 2/8] cciss: reference driver support
PATCH 2/8
This patch adds the support to fire up on any HP RAID class device that
has a valid cciss signature.
Please consider this for inclusion.
Thanks,
mikem
Signed-off-by: Mike Miller <mike.miller@...com>
cciss.c | 30 +++++++++++++++++++++++-------
1 files changed, 23 insertions(+), 7 deletions(-)
--------------------------------------------------------------------------------
diff -urNp linux-2.6-p00001/drivers/block/cciss.c linux-2.6/drivers/block/cciss.c
--- linux-2.6-p00001/drivers/block/cciss.c 2006-10-31 14:45:20.000000000 -0600
+++ linux-2.6/drivers/block/cciss.c 2006-10-31 14:52:09.000000000 -0600
@@ -83,6 +83,8 @@ static const struct pci_device_id cciss_
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3214},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3215},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC, 0x103C, 0x3233},
+ {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+ PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
{0,}
};
@@ -112,6 +114,7 @@ static struct board_type products[] = {
{0x3214103C, "Smart Array E200i", &SA5_access},
{0x3215103C, "Smart Array E200i", &SA5_access},
{0x3233103C, "Smart Array E500", &SA5_access},
+ {0xFFFF103C, "Unknown Smart Array", &SA5_access},
};
/* How long to wait (in milliseconds) for board to go into simple mode */
@@ -2954,13 +2957,6 @@ static int cciss_pci_init(ctlr_info_t *c
break;
}
}
- if (i == ARRAY_SIZE(products)) {
- printk(KERN_WARNING "cciss: Sorry, I don't know how"
- " to access the Smart Array controller %08lx\n",
- (unsigned long)board_id);
- err = -ENODEV;
- goto err_out_free_res;
- }
if ((readb(&c->cfgtable->Signature[0]) != 'C') ||
(readb(&c->cfgtable->Signature[1]) != 'I') ||
(readb(&c->cfgtable->Signature[2]) != 'S') ||
@@ -2969,6 +2965,26 @@ static int cciss_pci_init(ctlr_info_t *c
err = -ENODEV;
goto err_out_free_res;
}
+ /* We didn't find the controller in our list. We know the
+ * signature is valid. If it's an HP device let's try to
+ * bind to the device and fire it up. Otherwise we bail.
+ */
+ if (i == ARRAY_SIZE(products)) {
+ if (subsystem_vendor_id == PCI_VENDOR_ID_HP) {
+ c->product_name = products[i-1].product_name;
+ c->access = *(products[i-1].access);
+ printk(KERN_WARNING "cciss: This is an unknown "
+ "Smart Array controller.\n"
+ "cciss: Please update to the latest driver "
+ "available from www.hp.com.\n");
+ } else {
+ printk(KERN_WARNING "cciss: Sorry, I don't know how"
+ " to access the Smart Array controller %08lx\n"
+ , (unsigned long)board_id);
+ err = -ENODEV;
+ goto err_out_free_res;
+ }
+ }
#ifdef CONFIG_X86
{
/* Need to enable prefetch in the SCSI core for 6400 in x86 */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists