aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Miller <mike.miller@hp.com>2006-12-06 23:35:00 -0500
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-07 11:39:29 -0500
commit4ff9a9a4baff2627d7bcf65d0ec07d647bc1ad29 (patch)
tree2ffc0c340d506ddcd04ae6ac214d577787f0ab10
parent9d827c9e8a9d8592167ac3fdc3a50544c86302b1 (diff)
[PATCH] cciss: reference driver support
Add the support to fire up on any HP RAID class device that has a valid cciss signature. Signed-off-by: Mike Miller <mike.miller@hp.com> Acked-by: Jens Axboe <jens.axboe@oracle.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/block/cciss.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 0af6f356fba5..d1f65def8ebb 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -83,6 +83,8 @@ static const struct pci_device_id cciss_pci_device_id[] = {
83 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3214}, 83 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3214},
84 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3215}, 84 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3215},
85 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC, 0x103C, 0x3233}, 85 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC, 0x103C, 0x3233},
86 {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
87 PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
86 {0,} 88 {0,}
87}; 89};
88 90
@@ -112,6 +114,7 @@ static struct board_type products[] = {
112 {0x3214103C, "Smart Array E200i", &SA5_access}, 114 {0x3214103C, "Smart Array E200i", &SA5_access},
113 {0x3215103C, "Smart Array E200i", &SA5_access}, 115 {0x3215103C, "Smart Array E200i", &SA5_access},
114 {0x3233103C, "Smart Array E500", &SA5_access}, 116 {0x3233103C, "Smart Array E500", &SA5_access},
117 {0xFFFF103C, "Unknown Smart Array", &SA5_access},
115}; 118};
116 119
117/* How long to wait (in milliseconds) for board to go into simple mode */ 120/* How long to wait (in milliseconds) for board to go into simple mode */
@@ -2960,13 +2963,6 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
2960 break; 2963 break;
2961 } 2964 }
2962 } 2965 }
2963 if (i == ARRAY_SIZE(products)) {
2964 printk(KERN_WARNING "cciss: Sorry, I don't know how"
2965 " to access the Smart Array controller %08lx\n",
2966 (unsigned long)board_id);
2967 err = -ENODEV;
2968 goto err_out_free_res;
2969 }
2970 if ((readb(&c->cfgtable->Signature[0]) != 'C') || 2966 if ((readb(&c->cfgtable->Signature[0]) != 'C') ||
2971 (readb(&c->cfgtable->Signature[1]) != 'I') || 2967 (readb(&c->cfgtable->Signature[1]) != 'I') ||
2972 (readb(&c->cfgtable->Signature[2]) != 'S') || 2968 (readb(&c->cfgtable->Signature[2]) != 'S') ||
@@ -2975,6 +2971,26 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
2975 err = -ENODEV; 2971 err = -ENODEV;
2976 goto err_out_free_res; 2972 goto err_out_free_res;
2977 } 2973 }
2974 /* We didn't find the controller in our list. We know the
2975 * signature is valid. If it's an HP device let's try to
2976 * bind to the device and fire it up. Otherwise we bail.
2977 */
2978 if (i == ARRAY_SIZE(products)) {
2979 if (subsystem_vendor_id == PCI_VENDOR_ID_HP) {
2980 c->product_name = products[i-1].product_name;
2981 c->access = *(products[i-1].access);
2982 printk(KERN_WARNING "cciss: This is an unknown "
2983 "Smart Array controller.\n"
2984 "cciss: Please update to the latest driver "
2985 "available from www.hp.com.\n");
2986 } else {
2987 printk(KERN_WARNING "cciss: Sorry, I don't know how"
2988 " to access the Smart Array controller %08lx\n"
2989 , (unsigned long)board_id);
2990 err = -ENODEV;
2991 goto err_out_free_res;
2992 }
2993 }
2978#ifdef CONFIG_X86 2994#ifdef CONFIG_X86
2979 { 2995 {
2980 /* Need to enable prefetch in the SCSI core for 6400 in x86 */ 2996 /* Need to enable prefetch in the SCSI core for 6400 in x86 */